docker-compose.yml Syntax for Named Volumes



指定命名卷的主机路径的docker-compose.yml语法是什么?

docker-compose.yml:

volumes:
myvolume:  # how do I specify path here?
othervolume:
services: # etc...

我已经检查了文档,但找不到它。老实说,我不知道有人如何使用这些东西。

组合卷的常见方案是使用默认命名卷,该卷映射到本地卷驱动程序并将卷放在/var/lib/docker/volumes 中。不是您要找的,但这是许多人的简单选择:

version: '3'
volumes:
myvolume:
othervolume:    
services:
myservice:
volumes:
- myvolume:/volume/path

映射主机卷的常用方法是直接指定路径,无需在卷上指定名称。同样,这不是您所要求的,但它很容易实现。这是盖子下的绑定安装:

version: '3'
services:
myservice:
volumes:
- ./path:/volume/path

如果要同时使用命名卷和主机卷,则要查找的是配置为使用绑定装载的命名卷。如果目录不存在,这样做的缺点是失败,但好处是 docker 可以将空目录初始化为映像的内容。

version: '3'
volumes:
myvolume:
driver: local
driver_opts:
type: none
o: bind
device: /host/path/to/volume
services:
myservice:
volumes:
- myvolume:/container/volume/path

请注意,绑定挂载的缺点是,它将容器管理的文件(容器中的 uid/gid(放置在主机上其他用户可能使用的路径中,主机上通常具有不同的 uid/gid。结果是主机上或容器内的权限问题。您需要在两者之间对齐 uid/gid 以避免这种情况。

在相同的参考文档中,您可以检查示例 docker-compose.yml 的完整扩展版本

https://docs.docker.com/compose/compose-file/#compose-file-structure-and-examples

有关命名卷挂载的信息,请参阅 db 部分。

db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]

最新更新