如何使用与主机共享的数据创建命名 Docker 数据卷

How do I create a Named Docker Data Volumes with data shared with host

如何使用 2.1 版 Docker Compose 语法创建共享命名卷。我想将主机文件夹挂载为共享卷,并在关机之间将数据保留在主机上。

web:
< ----- remainder of service defn omitted for clarity ----->
  # Load the external volume 'pgdata' into the folder /var.. on the host
  volumes:
    - pg-data:/var/lib/postgresql/data


# Top level volumes key allows sharing of volume across multiple services
# Volumes defined as name: <path on host>
volumes:
  # Volume named pgdata is located here on the host
  pg-data: #/var/lib/postgresql/data/
  # App data volume
  app-data: #./scribl/
  # Static files volume
  static-data: #./static/

更新: 我正在寻找的关键是能够指定共享卷在主机上的位置,即与旧方法相同但使用命名容器

volumes:
  - location/on/host:location/on/container

好吧,在 git 问题列表中进行了大量搜索后,我们有:

Github Issue

实现看起来像这样,其中 volumes 是顶级命令:

volumes:
  # Volume named pgdata is located here on the host
  pg-data: #/var/lib/postgresql/data/
    driver: local
    driver_opts:
      device: /var/lib/postgres/ # this is the mount path on the host
      o: bind

编辑:
设备路径必须是绝对路径 -> docker 开发人员就此

进行了大量的交流

"Named volumes" 和 "specify the mount point on the host" 是互斥的选项。可能 可能 这样做(因为有些人在您链接的 Github 问题中尝试了一系列命令)但它确实不是一个常见的用例所以它应该不需要,甚至通常推荐

命名卷的意义在于能够通过为数据卷命名来持久化和重用(装载到另一个容器中)数据,以便您知道其中的内容。这样,当您启动另一个容器时,您可以执行 -v my-mysql-data:/var/lib/mysql 之类的操作,而无需在主机上指定挂载点。如果您在主机上为卷指定一个安装点,则不需要命名卷,因为您已经有了名称(路径),您甚至可以检查内容。 "name" 是 "host mount point".