version: '3'
services:
c1:
build:
context: .
dockerfile: 1.Dockerfile
volumes:
- data:/folder
c2:
build:
context: .
dockerfile: 2.Dockerfile
volumes:
- data:/folder
depends_on:
- c1
volumes:
data:
FROM ubuntu:latest
RUN mkdir -p /folder/
RUN touch /folder/1.txt
VOLUME /folder
FROM ubuntu:latest
RUN mkdir -p /folder/
RUN touch /folder/2.txt
VOLUME /folder
每当我做docker-compose up
然后做
docker-compose run --rm c2 bash
ls folder
或
docker-compose run --rm c1 bash
ls folder
无论如何,我总是从c1
获取文件夹,c2
不应该覆盖c1
的卷
答案 0 :(得分:1)
您可以在以下文档中了解您在文档中描述的行为:https://docs.docker.com/storage/volumes/#populate-a-volume-using-a-container
如果您如上所述启动一个容器来创建新的卷,并且该容器中有要挂载的目录(例如/ app /)中有文件或目录,则目录的内容将复制到该卷中。然后,容器安装并使用该卷,使用该卷的其他容器也可以访问预先填充的内容。
因此,正在发生的是在创建卷时使用c1容器中的数据启动了卷。
然后将预填充的卷安装到c1和c2上。
将数据预填充到卷上会发生创建时间。之后,将卷与创建期间填充的数据进行映射。