把文件目录软链接到 docker 映射的目录下,发现无法识别。即使把目录拷贝一份放在映射目录下,再建立软链接,docker 也识别不了软链接。是方法不对还是说 docker 不识别软链接?
1
wellsc 2017-08-09 10:36:01 +08:00
centos 下是识别的
|
2
l142857 2017-08-09 10:37:39 +08:00
我之前也遇到过软链接相关的问题,但时间久远,细节不太记得了,不能确定和你的是不是一个问题,方便的话贴个重现脚本看看吧?
|
3
zuolan 2017-08-09 10:43:40 +08:00
识别,ext4,btrfs 都可以。
|
4
l142857 2017-08-09 13:11:57 +08:00 1
本质上 symlink 只是一个文件或目录的"链接"(anchor),实际上,早期的 symlink 实现中,一个 symlink 就是包含了一个路径名的普通文件。
所以,一个 symlink 在容器和宿主机上指向的实际目标很可能是不同的,比如通过以下脚本新建的容器: ``` mkdir volume ln -s / volume/root docker run --rm -ti -v `pwd`/volume:/data -w /data busybox sh ``` 在宿主机,和容器内分别执行`ls root`, 看到的内容是不同的,分别是宿主机和容器的根目录。 如果你希望 symlink 在容器和宿主机上指向的目标一致,靠谱一点的办法是将目标文件放在 volume 内,而且采用相对路径的方式创建 symlink, 比如: ``` mkdir volume cd volume touch target ln -s ./target symlink1 ln -s `pwd`/target symlink2 docker run --rm -ti -v `pwd`:/data -w /data busybox sh ``` 在以上脚本建立的容器内执行` cat /data/symlink1`和`cat /data/symlink2`,会发现前者能正确访问到文件,后者则会报错 |