问题
我想创建一个docker容器并绑定挂载一个本地文件夹,e.例如:
docker -it run --mount type=bind,src=$(pwd),dst=/data busybox sh
然后我想:
1.在/data
中创建一个新的符号链接,链接到挂载外部的文件(例如:g. /data/abinary -> /usr/local/bin/abinary
)
1.退出容器
1.从主机访问新创建的符号链接(即使它解析为挂载外的文件)
使用Docker可以吗?
上下文
背景是我有一个带有Python环境的Docker容器。我希望能够从我的主机访问python二进制文件,即使我访问的文件是挂载外部文件的符号链接。
或者换句话说,我希望以下两个命令在从主机运行时执行相同的操作:
./python
docker exec -it mycontainer /data/python
1条答案
按热度按时间rmbxnbpk1#
Docker容器有一个独立的文件系统。容器无法访问主机上的文件(没有绑定装载),主机也无法访问容器中的文件。特别是,使用您描述的设置,主机无法直接调用容器中的Python安装。
符号链接将文件名存储为目录项。在Docker绑定挂载的情况下,如何解释它取决于您查看的是主机还是容器文件系统。
您可以通过创建一个包含符号链接的主机目录来演示这一点,然后将其绑定挂载到运行不同发行版的容器中,并查看它的作用。
因此,我们在这里创建了一个指向
/usr/bin/more
的符号链接。在主机上运行它将返回more
的主机版本;在Ubuntu容器中,它的util-linux
版本;而在BusyBox容器中,则是一个错误(因为该工具实际上位于/bin
中)。在任何情况下,符号链接都不会从容器文件系统交叉到主机,反之亦然。