问题描述
在使用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
命令都会创建一个新的卷。如果想要在不同容器之间共享卷,建议使用上述两种方法中的一种来定义卷。
希望以上解决方案能帮助到你!如果你有任何其他问题,请随时提问。
正文完