首页 > 解决方案 > 两个容器之间的 Docker 卷

问题描述

假设我们有以下 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的卷

标签: dockerdocker-composedocker-volume

解决方案


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

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

所以发生的事情是,您的卷是在创建时使用 c1 容器中的数据启动的。

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

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


推荐阅读