在 docker 容器中安装具有符号链接的主机目录

我用这个参数装载了容器:

- v/home/test/:/home/test

在主机的/home/test 中,有一个指向/mnt/文件夹的符号链接。

但这种联系,尽管可以看到指向哪里,似乎在容器内部破裂:

root@f93f72b45013:/var/www/html# cd /home/test/
root@f93f72b45013:/home/test# ls -lrt
total 11956
lrwxrwxrwx. 1 root root 40 Jul 20 15:55 file -> /mnt/mountedfile/
root@f93f72b45013:/home/test# ls -lrt file/*
ls: cannot access file/*: No such file or directory

在码头上能做到吗?我不确定是否有办法做到这一点。

我知道我可以直接挂载符号链接指向的地方,但我只是想知道这是否可行。

122826 次浏览

在 docker 中,符号链接是一个很大的挑战:

-v /home/test/:/home/test -v /mnt/mountedfile:/mnt/mountedfile

为了使符号链接在容器内部和外部都能工作,它们必须是绝对路径并使用完全相同的名称。

一般来说,符号链接在 docker 内部不起作用。

一种解决方案是让 Docker 挂载原始文件,但使用 readlink -f打印文件的实际位置。这样,您仍然可以在命令中引用 symlink 位置,例如。

docker run -it -v $(readlink -f /home/test/):/home/test/ ...

你好,谢谢你的帮助在我的情况下,我正在努力激活我的角 nginx 应用程序的 https

docker run -p 80:80 -p 443:443 \
--name test \
-v /etc/letsencrypt/live/exemple.com:/etc/nginx/certs \
-v /home/admin/nginx-default.conf:/etc/nginx/conf.d/default.conf:ro test

不在 docker 中挂载 links cert.pem 和 Privkey.pem

但是如果我像这样明确地使用所有文件路径

docker run -p 80:80 -p 443:443 \
--name test \
-v /etc/letsencrypt/live/example.com/cert.pem:/etc/nginx/certs/cert.pem \
-v /etc/letsencrypt/live/example.com/privkey.pem:/etc/nginx/certs/privkey.pem \
-v /home/admin/nginx-default.conf:/etc/nginx/conf.d/default.conf:ro test

一切正常 我想你也可以做同样的事情

我不能回答预览的答案,但在一个类似的情况下,我需要得到一个链接的文件,设置完整的文件路径,你建议的编写文件为我工作:

  - /opt/cert/ssl/live/example.com/cert.pem:/certs/cert.pem
- /opt/cert/ssl/live/example.com/privkey.pem:/certs/privkey.pem

example.com下的 cert.pemprivkey.pem文件都是链接到 certbot 定位它们的文件的链接。

我认为解决这个问题的一个好方法。

在码头容器中,从主机安装的符号链接不能正常工作。 但是在 docker 容器中创建的一个符号链接可以正常工作。因此,首先将感兴趣的根(具有绝对路径)挂载到容器中,然后在容器中创建符号链接,使用满足需求的结构是一个好主意。这样,你就可以走了。

希望这个能帮上忙。