docker 不识别软链接吗?

2017-08-09 10:18:16 +08:00
 myyou

把文件目录软链接到 docker 映射的目录下,发现无法识别。即使把目录拷贝一份放在映射目录下,再建立软链接,docker 也识别不了软链接。是方法不对还是说 docker 不识别软链接?

9312 次点击
所在节点    Docker
5 条回复
wellsc
2017-08-09 10:36:01 +08:00
centos 下是识别的
l142857
2017-08-09 10:37:39 +08:00
我之前也遇到过软链接相关的问题,但时间久远,细节不太记得了,不能确定和你的是不是一个问题,方便的话贴个重现脚本看看吧?
zuolan
2017-08-09 10:43:40 +08:00
识别,ext4,btrfs 都可以。
l142857
2017-08-09 13:11:57 +08:00
本质上 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`,会发现前者能正确访问到文件,后者则会报错
myyou
2017-08-09 15:10:42 +08:00
@l142857 谢谢,问题已解决

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX