我尝试将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”?
答案 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