将卷安装到符号链接位置

问题描述 投票:0回答:1

使用

docker-compose
我正在尝试挂载包含多个目录的工作目录,其中一些是符号链接。

例如,我想挂载包含目录

A
B
C
的工作目录。但是,目录
C
是指向
C:\Users\MyUser\C

的符号链接

因此,我会像这样挂载我的目录:

volumes:
  - ../C:/mnt/host/c/Users/MyUser/C/ # Mounting to the symbolic link location
  - ./:/usr/src/app  # My working directory

这个效果很好。然而,问题是

c/Users/MyUser
取决于执行命令的用户。因此,用户必须进入并将文件更新为类似
c/Users/SomeOtherUser
的内容才能使其仍然有效。换句话说,我将其安装到的目录取决于用户。

如何将其与用户解耦?可以假设目录

C
位于用户的
Home
目录中,并且比当前目录高一级。我想做的是这样的:

volumes:
  - ../C:/mnt/host/${PWD}/../C/

但是,这不起作用,因为它不是有效的语法。如何将卷安装到符号链接的位置?

docker docker-compose symlink
1个回答
0
投票

一般情况

我解决此类问题的唯一方法是使用相对符号链接而不是绝对符号链接,或者依靠 Mutagen 在安装到容器中时显式配置符号链接行为。

虽然不清楚为什么要求容器中挂载的路径需要包含仅存在于主机上的用户名,尽管容器本身并不存在。
这会导致资源丢失。
我猜这是因为您的系统中已经存在以前的符号链接。

符号链接可能不是正确的解决方案。

您对主机系统上的符号链接有影响吗?

C
坐骑的本质是什么?它提供缓存目录吗?一些静态文件?依赖源代码?
您可以重组您的依赖位置吗? 您不能将
C:\Users\MyUser\C
目录移动到本地主机上更不可知的路径中吗? (例如
/home/shared/
并要求谁运行 Docker 必须在本地主机上拥有此共享目录?(无论本地主机用户名如何,至少它是相同的名称;少一个要求)

最后……想想
C
文件夹提供了什么。

如果它是一个依赖项,那么更有意义的是:

  • 在需要的地方复制/复制该目录(它可能应该在源代码中,而不是引入可能在机器之间不一致的要求)。
  • 如上所述,如果需要保留该要求,至少选择一个标准/固定路径,不需要根据机器用户动态
  • 如果它是一个依赖项,并且您不想将其复制到项目工作目录中,那么将其封装在“包”(Git 存储库;来自 CDN 的存档等)中可能是有意义的,并且 **使用 git-clone、包管理器或 bash/curl 脚本在项目中获取它,而不是使用 Docker 卷来访问这些(有点“远程”)资源。

对于依赖管理,最后一个选项可能是最需要考虑的选项。

© www.soinside.com 2019 - 2024. All rights reserved.