如何在由父docker共享docker.sock创建的子docker中装入卷

时间:2019-01-12 00:45:12

标签: docker docker-compose dockerfile

我正在尝试创建一个包装容器,以使用无法修改的docker-compose构建和运行一组容器。 docker-compose会挂载多个卷,但是从包装docker内部启动docker-compose时,由于docker .sock已被卷挂为主机的docker.sock,因此仍会从主机上挂载这些卷。

由于jpetazzo's article中概述的与其相关的所有问题,我不想不必使用完整的docker-in-docker。

我也想避免使用volume-from,因为我无法编辑前面提到的docker-compose文件。

是否有办法使此代码段正确使用父码头工人的文件,而不是转到主机文件系统并从那里安装它?

FROM docker:latest

RUN mkdir -p /tmp/parent/ && echo "This is from the parent docker" > /tmp/parent/parent.txt
CMD docker run -v /tmp/parent/parent.txt:/root/parent.txt --rm ubuntu:18.04 bash -c "cat /root/parent.txt"

使用与此类似的命令运行时:

docker build -t parent . && docker run --rm -v /var/run/docker.sock:/var/run/docker.sock parent

1 个答案:

答案 0 :(得分:0)

在主机映像和docker映像内部使您的路径相同,例如

docker run -v /var/run/docker.sock:/var/run/docker.sock \
  -v /home/user:/home/user -w /home/user/project parent_image ...

通过将卷作为/ home / user挂载在映像内的同一位置,与相对绑定挂载的docker-compose up之类的命令在与docker套接字通信时将使用容器路径名,这将匹配路径在主机上。