命名卷的docker-compose.yml语法

命名卷的docker-compose.yml语法,docker,docker-compose,docker-volume,Docker,Docker Compose,Docker Volume,用于指定命名卷的主机路径的docker compose.yml语法是什么 docker-compose.yml: 我查过了,但找不到。老实说,我不知道任何人是如何使用这些东西的。在相同的参考文档中,您可以查看示例docker-compose.yml的完整扩展版本 有关命名卷装载,请参见db部分 db: image: postgres:9.4 volumes: - db-data:/var/lib/postgresql/data networks:

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

docker-compose.yml:
我查过了,但找不到。老实说,我不知道任何人是如何使用这些东西的。

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

有关命名卷装载,请参见db部分

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

组合卷的常见场景是使用默认命名卷,该卷映射到本地卷驱动程序并将卷放置在/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 volume create myvol
创建命名卷,然后在装载时使用此命名卷。您如何知道容器uid/gid是什么?@thor84没有像
id
这样的Linux命令在容器内和主机上的工作方式相同。是的,但由于“权限被拒绝”错误,我无法让容器保持足够长的时间来尝试该操作:(@Thor84no)您可以使用不同的命令启动容器,例如
tail-f/dev/null
@zhkzyth任何不立即出错的命令都可以保持容器运行,但在发布时,您希望应用程序在前台运行。
version: '3'
volumes:
  myvolume:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /host/path/to/volume
services:
  myservice:
    volumes:
      - myvolume:/container/volume/path