【问题标题】:Symlink in docker container not supported?不支持 docker 容器中的符号链接?
【发布时间】:2019-03-26 16:36:04
【问题描述】:

我做了一些搜索,看起来 docker 容器内不支持符号链接,有解决方法吗?我还使用了一个挂载到我的主目录(在主机上)的卷,这是持久的。

当我加载容器时,我的主目录中的现有符号链接不起作用。我什至尝试在容器内创建符号链接,但这也不起作用。

编辑:我正在玩安装 >1 卷,可能已经找到了一些东西。如果我安装一个镜像符号链接路径的卷,那么它似乎可以工作。例如,如果我在容器内的 /work 目录上有一个符号链接到 /media/disk1 的数据文件夹(并且 /work 映射到主机上的 /home),我可以挂载另一个卷,将 /media/disk1 附加到/work/data,(和 /media/disk1 是主机上 /home/data 的符号链接),然后符号链接在容器内工作!

【问题讨论】:

  • 全面的声明 "symlink is not supported inside a docker container" 是不正确的。不过,您显然遇到了问题,所以请说明您实际在尝试什么,以及会发生什么。
  • 正确的minimal reproducible example 包括所有内容(尽管可能是最短/最小的“所有内容”)其他人需要重现您所询问的问题我>。正如 SiHa 所说,支持 Docker 容器中的符号链接 - 所以这个问题,正如目前所写的那样,陈述了一个不真实的前提,而不是展示如何重现一个狭窄而具体的(并且可能是非常真实的)问题。
  • 我没有用我的话,但许多人报告说符号链接不是“完全支持”,例如:stackoverflow.com/questions/31881904/…

标签: docker


【解决方案1】:

我会回答我自己的问题,以防其他人遇到这个问题。

首先,我们创建卷

docker volume create --name work type=none --opt device=/home/username --opt o=bind

然后,我们运行容器

docker container run -it --rm --mount source=work,target=/work

这样我的主机主目录 (/home/username) 就会映射到容器中的 /work 目录。

现在,在我的主目录中,有一个符号链接数据 -> /media/disk1/data 在容器内不起作用。

但是,如果我设置另一个卷并挂载以使路径与符号链接匹配,即

docker volume create --name data type=none --opt device=/media/disk1/data --opt o=bind
docker container run -it --rm --mount source=work,target=/work --mount source=data,target=/work/data

然后,符号链接起作用了。

我认为问题在于符号链接引用了容器“不知道”的路径,并且只有将该路径作为附加卷安装在正确的位置,符号链接才能工作。

【讨论】:

    【解决方案2】:

    符号链接需要相对于您的容器创建,而不是您的本地机器。使用以下命令访问容器中的命令行:

    docker exec -it name_of_your_php_container bash
    

    您的符号链接应类似于:

    storage -> /var/www/html/storage/app/public
    

    它不应该与您的本地机器相关,即

    storage -> /Users/name/Sites/my-project/storage/app/public
    

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多