如何解决共享 docker 卷挂载主机目录
我喜欢在我的主机上挂载一个特定目录和两个容器。一切都在 docker-compose.yaml 文件中定义。
在 yaml 文件的 services 部分,对于两个容器,指定了以下内容:
volumes:
- myvolume:/internal/path
在volume部分,volume定义为:
volumes:
myvolume:
driver: local
默认情况下,共享卷作为单个文件位于 /var/libs/docker/volumes 中。现在,我想在主机的文件系统中指定一个目录,比如说目录 /host/directory。有人可以说明如何通过 docker-compose 实现这一点吗?
解决方法
与 docker 服务共享主机卷是通过在服务部分指定卷来完成的,如下所示:
# ...
volumes:
- /path/in/host:/path/in/service
# ...
多个服务可能使用同一个主机卷。
举一个更完整的例子,一个 docker-compose.yaml
将一个 Linux 主机目录挂载到多个 docker 服务中,例如看起来像这样:
version: "3.3"
services:
service_1:
image: alpine
volumes:
- ./shared_host_directory:/path/in/service_1
command: >
/bin/sh -c "echo 'A message from service 1' >> /path/in/service_1/output.log"
service_2:
image: alpine
volumes:
- ./shared_host_directory:/path/in/service_2
command: >
/bin/sh -c "echo 'A message from service 2' >> /path/in/service_2/output.log"
如果您使用以下命令执行此示例
mkdir -p shared_host_directory # Make sure that the shared host directory exists.
rm -rf shared_host_directory/output.log # Make sure that the output file does not exist yet.
docker-compose up # Execute the docker-compose.yaml file until both services terminate.
cat shared_host_directory/output.log # Get the output of the created log file.
那么shared_host_directory/output.log
的显示内容应该是这样的:
A message from service 1
A message from service 2
请注意,由于服务 1 和 2 之间的竞争条件,线路可能会切换。
当然,您也可以将 docker-compose.yaml
中的相对路径替换为绝对路径。
引用 docker compose 文件参考,https://docs.docker.com/compose/compose-file/compose-file-v3/#volumes,
您可以挂载一个主机路径作为单个定义的一部分
服务,不需要在顶级volumes
中定义
键。
请注意,上面的链接还包含有关使用 docker-compose
的卷的更多示例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。