docker-compose自动管理的卷在容器之间不共享

96次阅读
没有评论

问题描述

在使用docker-compose时,对于docker-compose如何处理自动管理的卷有些困惑。他提供了一个docker-compose.yml文件的示例,并描述了他的预期结果和实际结果。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在docker-compose中,如果想要在同一个服务(例如,服务one)的不同容器之间共享卷,可以使用以下方式定义卷:

version: '3.7'
services:
  one:
    image: alpine
    command: sh -c 'echo one >> /data/db.txt && cat /data/db.txt | wc -l'
    volumes:
      - ${local_path}:/data

在上面的示例中,我们使用${local_path}:/data来定义卷。${local_path}是一个变量,你可以将其替换为你想要的本地路径。这样,不同容器之间就可以共享同一个卷了。

方案2

另一种方法是使用docker卷来定义卷。你可以在docker-compose.yml文件中添加一个volumes部分,并在services部分中引用该卷。以下是一个示例:

version: '3.7'
volumes:
  db-data:
services:
  one:
    image: alpine
    command: sh -c 'echo one >> /data/db.txt && cat /data/db.txt | wc -l'
    volumes:
      - db-data:/data

在上面的示例中,我们在docker-compose.yml文件中定义了一个名为db-data的卷,并在服务one的volumes部分中引用了该卷。这样,不同容器之间就可以共享同一个卷了。

请注意,使用自动管理的卷时,每次运行docker-compose run命令都会创建一个新的卷。如果想要在不同容器之间共享卷,建议使用上述两种方法中的一种来定义卷。

希望以上解决方案能帮助到你!如果你有任何其他问题,请随时提问。

正文完