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

时间:2017-01-29 11:09:20

标签: docker docker-compose docker-volume

如何使用V2.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

2 个答案:

答案 0 :(得分:4)

好的,经过多次搜索git问题列表,我们有:

Github Issue

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

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

修改
设备路径必须是绝对路径 - &gt;关于这个

,有很多来自Docker devs的来回

答案 1 :(得分:1)

&#34;命名卷&#34;和&#34;指定主机上的挂载点&#34;是互斥的选择。可能可能这样做(因为有些人尝试过你链接过的Github问题中的一系列命令),但它确实不是一个常见的用例,所以它不应该这样做。是需要,甚至通常推荐

指定卷的要点是能够持续存在&amp;通过为数据卷指定一个名称来重用(装入另一个容器)数据,以便您知道其中的内容。这样,当您启动另一个容器时,您可以执行-v my-mysql-data:/var/lib/mysql之类的操作,而无需在主机上指定挂载点。如果您在主机上为卷指定装入点,则不需要命名卷,因为您已经有了名称(路径),您甚至可以检查内容。 &#34;名称&#34;是&#34;主机挂载点&#34;。