docker - docker-in-docker 卷上的 $(pwd) 挂载了意外的目录
问题描述
例子:
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-volumes
主机操作系统上。share
并且tomita-cfg
是来自主机操作系统的文件夹,但路径完全不同,它甚至不是从~
解决方案
挂载到新容器中的/app
目录是主机目录中的任何目录。
这不是 Docker 中的 Docker,因为我理解该术语的意思是:您没有在 Docker 容器内运行 Docker 的第二个副本,您只是在容器内访问主机的 Docker 套接字。
在您展示的场景中,当您在主机的 Docker 套接字安装并运行的容器内时docker run -v $(pwd):/app2 ...
,首先容器内的外壳扩展$(pwd)
为/app
,然后它向 Docker 守护程序发送请求以启动具有/app
绑定安装到的容器/app2
。从 Docken 守护进程的角度来看,这与直接在主机上运行相同的命令没有区别。
推荐阅读
- c# - 为什么 Html.Hidden 在 C# ASP.NET MVC razor 视图中不起作用?
- python - 在 YAML 中解析和替换字符串
- orm - 使用ORM的三张表之间的Laravel关系
- javascript - 如何在多行字符中只显示一个标签?
- ios - 如何使用方法 swizzling 更改 iOS 应用程序中使用的系统字体?
- twitter-bootstrap - 如何在 Domino 中使用 Bootstrapthemes?
- python - Python——函数的可选参数
- azure - Azure 生命周期管理 - 区域
- httpclient - 无法在 HttpClient 中设置授权标头(.Net core 3.1)
- node.js - 节点 js 中的 pg 7.18.0 不起作用,抛出:不推荐使用隐式禁用证书验证,并将在 pg 8 中删除