为什么Docker(Dind)容器中的Docker使用主机路径装载卷?

我在docker中安装了docker并尝试安装文件夹。

假设我有希望与他的父母共享的文件夹。在主机上,我在/ tmp /

dind中创建了一个名为的文件foo。主机启动容器1,该容器启动容器2。这是我想要的结果。

Host      | Container 1 | Container 2

/tmp/dind | /tmp/dind2 | /tmp/dind3

<-------> <------->

相反,我得到

Host      | Container 1 | Container 2

/tmp/dind | /tmp/dind2 | /tmp/dind3

<------->

<----------------------->

代码在这里:

docker run --rm -it \

-v /tmp/dind:/tmp/dind2 \

-v /var/run/docker.sock:/var/run/docker.sock docker sh -c \

"docker run --rm -it \

-v /tmp/dind2:/tmp/dind3 \

-v /var/run/docker.sock:/var/run/docker.sock \

docker ls /tmp/dind3"

这没有输出,而下一条命令给出foo作为结果。我更改了挂载的音量:

docker run --rm -it \

-v /tmp/dind:/tmp/dind2 \

-v /var/run/docker.sock:/var/run/docker.sock docker sh -c \

"docker run --rm -it \

-v /tmp/dind:/tmp/dind3 \

-v /var/run/docker.sock:/var/run/docker.sock \

docker ls /tmp/dind3"

问题是,要使用容器1路径而不是主机,我需要做什么?还是我在这里误解了一些关于docker的东西?

回答:

对于您所说的“ Docker-in-Docker”和“ dind”而言,此设置实际上并不是Docker-in-

Docker:您的container1正在向影响容器Container2的主机Docker守护进程提供指令。

Host      Container1

/-----

(Docker)

| Container2

\---->

(NB:这 通常用于CI型设置中的推荐路径“多克尔合泊坞”通常是指container1运行其自己的,独立的,多克尔守护进程,这趋向于不被推荐。)。

由于container1正在向主机的Docker提供指令,并且主机的Docker正在启动container2,因此任何docker run

-v路径始终是主机的路径。除非您知道某个特定目录已经安装到您的容器中,否则很难与“子容器”共享文件。

解决此问题的一种方法是断言存在某种共享路径:

docker run \

-v $PWD/exchange:/exchange \

-v /var/run/docker.sock:/var/run/docker.sock \

-e EXCHANGE_PATH=$PWD/exchange \

--name container1

...

# from within container1

mkdir $EXCHANGE_PATH/container2

echo hello world > $EXCHANGE_PATH/container2/file.txt

docker run \

-v $EXCHANGE_PATH/container2:/data

--name container2

...

当我在过去做到了这一点(对测试设置是希望推出辅助容器)我用一片苦心docker createdocker cpdocker

startdocker cpDocker rm序列。这是极其手动的操作,但是它的优点是,docker

cp即使您正在从容器内部与主机的Docker守护程序进行通信,a 的“本地”端也始终是当前文件系统上下文。

以上是 为什么Docker(Dind)容器中的Docker使用主机路径装载卷? 的全部内容, 来源链接: utcz.com/qa/424184.html

回到顶部