docker - 两个容器之间的 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
的卷
解决方案
您可以在此处阅读您在文档中描述的行为:https ://docs.docker.com/storage/volumes/#populate-a-volume-using-a-container
如果你启动一个容器来创建一个新的卷,如上,并且容器在要挂载的目录中有文件或目录(如上面的 /app/),则目录的内容将被复制到卷中。然后容器安装并使用该卷,并且使用该卷的其他容器也可以访问预填充的内容。
所以发生的事情是,您的卷是在创建时使用 c1 容器中的数据启动的。
然后将预填充的卷安装到 c1 和 c2。
数据预填充到卷发生在创建时间。之后,该卷将与创建期间填充的数据进行映射。
推荐阅读
- javascript - 在 html 中的学生成绩表中将包含“-”的单元格的颜色更改为黄色
- java - 从 charAt 保存为 int
- karate - 空手道 UI 跨浏览器示例
- php - Amadeus e-Power Web Service - 设置 SOAP 身份验证标头时出现问题
- android - 当我尝试在片段中动态更改 TextView 值时没有任何反应
- ruby-on-rails - 如何从对象数组中选择特定值或在 ruby 或 rails 中返回特定值
- android - 并行运行多个 Firebase TextRecognition 进程
- python - 使用python枚举
- c# - 如何在 CSharpFunctionalExtensions 中正确地将同步和异步方法链接在一起?
- mailgun - MailGun(二进制数据附件)