gpt4 book ai didi

docker - 为什么docker(dind)容器中的docker使用主机路径安装卷?

转载 作者:行者123 更新时间:2023-12-02 18:03:00 26 4
gpt4 key购买 nike

我在 docker 中设置了 docker 并尝试挂载文件夹。

假设我有那些我希望与他的 parent 共享的文件夹。在主机上,我在/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:您的容器 1 正在向主机的 Docker 守护进程发出影响容器 2 的指令。

Host      Container1
/-----
(Docker)
| Container2
\---->

(注意:这通常是 CI 类型设置的推荐路径。“Docker-in-Docker”通常意味着 container1 正在运行它自己的、独立的 Docker 守护进程,这往往不被推荐。)

由于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 create , docker cp , docker start , docker cp , Docker rm序列。这是非常手动的,但它的优点是 docker cp 的“本地”端即使您从容器内与主机的 Docker 守护进程对话,也始终是当前的文件系统上下文。

关于docker - 为什么docker(dind)容器中的docker使用主机路径安装卷?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53539807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com