命名卷的docker-compose.yml语法

Pet*_*ron 5 docker docker-compose docker-volume

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

docker-compose.yml:

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

services: # etc...
Run Code Online (Sandbox Code Playgroud)

我已经检查了docs,但找不到。老实说,我不知道有人怎么使用这些东西。

BMi*_*tch 9

组成卷的常见情况是使用默认的命名卷,该默认卷映射到本地卷驱动程序,并将卷放置在/ var / lib / docker / volumes中。不是您要找的东西,但是对于许多人来说,这是简单的选择:

version: '3'
volumes:
  myvolume:
  othervolume:    
services:
  myservice:
    volumes:
      - myvolume:/volume/path
Run Code Online (Sandbox Code Playgroud)

映射主机卷的常用方法是直接指定路径,而无需在卷上指定名称。同样,这不是您要的,但是很容易实现。这是一个隐藏式装订:

version: '3'
services:
  myservice:
    volumes:
      - ./path:/volume/path
Run Code Online (Sandbox Code Playgroud)

如果要将命名卷和主机卷放在一起,则要查找的是配置为使用绑定安装的命名卷。如果目录不存在,这样做的缺点是失败,但另一方面,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
Run Code Online (Sandbox Code Playgroud)

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


fly*_*rix 0

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

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

请参阅 db 部分以了解命名卷安装。

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]
Run Code Online (Sandbox Code Playgroud)