V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
myyou
V2EX  ›  Docker

docker 不识别软链接吗?

  •  
  •   myyou · 2017-08-09 10:18:16 +08:00 · 9546 次点击
    这是一个创建于 2675 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2017-08-09 15:10:42 +08:00
    wellsc
        1
    wellsc  
       2017-08-09 10:36:01 +08:00
    centos 下是识别的
    l142857
        2
    l142857  
       2017-08-09 10:37:39 +08:00
    我之前也遇到过软链接相关的问题,但时间久远,细节不太记得了,不能确定和你的是不是一个问题,方便的话贴个重现脚本看看吧?
    zuolan
        3
    zuolan  
       2017-08-09 10:43:40 +08:00
    识别,ext4,btrfs 都可以。
    l142857
        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`,会发现前者能正确访问到文件,后者则会报错
    myyou
        5
    myyou  
    OP
       2017-08-09 15:10:42 +08:00
    @l142857 谢谢,问题已解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5744 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 03:12 · PVG 11:12 · LAX 19:12 · JFK 22:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.