在撰写文件版本3

时间:2017-03-22 16:42:15

标签: docker docker-compose

我尝试将docker-compose.yml从版本1升级到版本3.

关于

的主要问题
volumes_from: To share a volume between services, 
define it using the top-level volumes option and 
reference it from each service that shares it using the 
service-level volumes option.

最简单的例子:

版本“1”

data:
  image: postgres:latest
  volumes:
    - ./pg_hba.conf/:/var/lib/postgresql/data/pg_hba.conf

postgres:
  restart: always
  image:  postgres:latest
  volumes_from:
    - data
  ports:
    - "5432:5432"

如果我理解正确,应转换为

version: "3"

services:
  db:
    image: postgres:latest
    restart: always
    volumes:
      - db-data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - appn

  networks:
    appn:

  volumes:
    db-data:?

问题:现在如何在顶级卷选项中将相对路径设置为文件夹“example_folder”来自 Windows主机“db-data”

1 个答案:

答案 0 :(得分:1)

在这种情况下,您可能会使用volumes_from来考虑

正如docker 1.13 issue Sebastiaan van Stijn (thaJeztah)中提到的那样:

  

volumes_from基本上是"懒惰"将卷定义从一个容器复制到另一个容器的方法,所以;

docker run -d --name one -v myvolume:/foo image-one

docker run -d --volumes-from=one image-two
     

与跑步相同;

docker run -d --name one -v myvolume:/foo image-one
docker run -d --name two -v myvolume:/foo image-two
     

如果要部署到AWS,则不应使用bind-mounts,而应使用名为volumes的代码(如上例所示),例如;

version: "3.0"

services:
  db:
    image: nginx
    volumes:
      - uploads-data:/usr/share/nginx/html/uploads/

volumes:
  uploads-data:
     

您可以使用docker-compose运行;

docker-compose up -d
Creating network "foo_default" with the default driver
Creating volume "foo_uploads-data" with default driver
Creating foo_db_1

基本上,它在docker compose版本3中不可用:

  

有几个原因volumes_from没有移植到撰写文件" 3";

     
      
  • 在群中,无法保证" from"容器正在同一节点上运行。使用volumes_from不会产生预期的结果   绑定挂载尤其如此,在群集中,必须存在于主机上(不会自动创建)
  •   
  • 还有#34;比赛"条件(如前所述)
  •   
  • "数据"容器必须使用完全正确的卷路径作为" app"使用卷的容器(即如果" app"使用/some/path/in/container中的卷,则数据容器也必须具有/some/path/in/container的卷。在许多情况下,卷可能由多个服务共享,而这些服务可能在不同的路径中消耗该卷。
  •   

但是,正如issue 19990中提到的那样:

  

"常规"您要描述的卷是 bind-mount,;您指定来自主机的路径,并将其安装在容器中。没有数据从容器复制到该路径,因为使用了来自主机的文件。

     

对于卷,您要求docker创建一个卷(持久存储)来存储数据,并将数据从容器复制到该卷。

     

卷由docker(或通过插件)管理,存储路径(或机制)是一个实现细节,因为您所要求的只是一个存储,而是管理。

对于您的问题,您需要定义一个docker卷容器并将主机内容复制到其中:

services:
  data:
    image: "nginx:alpine"
    volumes:
      - ./pg_hba.conf/:/var/lib/postgresql/data/pg_hba.conf    
相关问题