2个容器之间的Docker卷

时间:2018-09-24 16:16:54

标签: docker docker-compose docker-volume

假设我们有以下docker-compose.yml文件

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:

具有以下1.Dockerfile

FROM ubuntu:latest
RUN mkdir -p /folder/
RUN touch /folder/1.txt
VOLUME /folder

和以下2.Dockerfile

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的卷

1 个答案:

答案 0 :(得分:1)

您可以在以下文档中了解您在文档中描述的行为:https://docs.docker.com/storage/volumes/#populate-a-volume-using-a-container

  

如果您如上所述启动一个容器来创建新的卷,并且该容器中有要挂载的目录(例如/ app /)中有文件或目录,则目录的内容将复制到该卷中。然后,容器安装并使用该卷,使用该卷的其他容器也可以访问预先填充的内容。

因此,正在发生的是在创建卷时使用c1容器中的数据启动了卷。

然后将预填充的卷安装到c1和c2上。

将数据预填充到卷上会发生创建时间。之后,将卷与创建期间填充的数据进行映射。