docker - $(pwd) 在 docker-in-docker volume 上挂载了意外的目录

标签 docker docker-volume docker-in-docker

例子:

pavel@Z546:~/test/dind-volumes$ ls
test.txt
pavel@Z546:~/test/dind-volumes$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/app -w /app -it docker sh
/app # ls
test.txt
/app # pwd
/app
/app # docker run -v $(pwd):/app2 -w /app2 -it alpine sh
/app2 # ls
share       tomita-cfg
/app2 # pwd
/app2

-v $(pwd):/app2 安装在哪个位置?它不是主机操作系统上的 ~/test/dind-volumessharetomita-cfg 是host OS的文件夹,但是路径完全不同,甚至不是从~

开始的

最佳答案

挂载到新容器中的目录是主机上 /app 目录中的任何内容。

不是 Docker in Docker据我了解,该术语的意思是:您没有在 Docker 容器内运行 Docker 的第二个副本,您只是在容器内访问主机的 Docker 套接字。

在您展示的场景中,当您在安装了主机 Docker 套接字的容器内并运行 docker run -v $(pwd):/app2 ... 时,首先是容器将 $(pwd) 扩展为 /app,然后它向 Docker 守护进程发送请求以启动带有 /app 的容器 -安装到 /app2。从 Docken 守护进程的角度来看,这与直接在主机上运行相同的命令没有区别。

关于docker - $(pwd) 在 docker-in-docker volume 上挂载了意外的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58531927/

相关文章:

Docker:拉取镜像时出错,在 $PATH 中找不到可执行文件

docker - 保护Docker容器和/或卷免受意外删除

google-kubernetes-engine - 是否可以在 GKE 上安装 Sysbox 容器运行时?

docker - 安装 kubeadm-dind-cluster 后无法访问 K8s 仪表板

docker - Docker未在Colab上运行

reactjs - Docker - 将http请求从一个容器发送到另一个容器

jenkins - docker build使用jenkins dind slave + kubernetes插件抛出java.net.AbstractPlainSocketImpl.connect UnknownHostException

Python Docker API 需要知道 attach(**kwargs) 到容器的语法

docker - 如何允许 docker 同级容器从现有卷绑定(bind)子目录