zoe*_*chi 54 linux filesystems symbolic-link shared-folders docker
我有两个需要 dockerize 的 Dart 应用程序。这两个应用程序使用共享源目录。
因为 Docker 阻止从上下文目录 ( project/app1)之外的文件夹添加文件,所以我无法从../shared或从shared(内部的符号链接projects/app1)添加文件。
我正在寻找一种方法来欺骗 Docker 无论如何。
我的简化项目结构
- projects
- app1
- Dockerfile
- shared (symlink ../shared)
- otherSource
- app2
- Dockerfile
- shared (symlink ../shared)
- otherSource
- shared
- source
Run Code Online (Sandbox Code Playgroud)
我可以向上移动Dockerfile一级并docker build从那里运行,但随后我需要在同一目录中使用两个 Dockerfile(用于 app1 和 app2)。
我目前的想法是,如果我能以某种方式隐藏projects/app1/shared作为符号链接的事实,这个问题就会得到解决。我检查了是否可以projects使用 Samba进行共享并将其重新安装到其他地方,并将 Samba 配置为将符号链接视为普通文件夹,但还没有找到是否支持(我对 Samba 没有太多经验,还没有尝试过,只是搜索了一下) .
有没有其他工具或技巧可以做到这一点?
我宁愿不更改目录结构,因为这会导致其他麻烦,也不愿复制文件。
ter*_*don 44
我没有太多经验,docker所以我不能保证这会起作用,但一种选择是挂载目录而不是链接到它:
$ cd projects/app1
$ mkdir shared
$ sudo mount -o bind ../shared shared/
Run Code Online (Sandbox Code Playgroud)
这将附加../shared到系统./shared并且应该对系统完全透明。如中所述man mount:
绑定安装。
从 Linux 2.4.0 开始,可以在其他地方重新挂载文件层次结构的一部分。电话是:
Run Code Online (Sandbox Code Playgroud)mount --bind olddir newdir或使用此 fstab 条目:
Run Code Online (Sandbox Code Playgroud)/olddir /newdir none bind在此调用之后,可以在两个地方访问相同的内容。
slm*_*slm 43
这个问题在 Docker 社区中反复出现。它基本上违反了Dockerfile如果你运行它或者我运行它是可重复的要求。所以我不希望有这种能力,如这张票中所述:Dockerfile ADD 命令不遵循主机 #1676 上的符号链接。
所以你必须想出一个不同的方法。如果您查看此问题:在参数 #6094 中添加支持符号链接,我们来自 U&L 的朋友(@Patrick aka. phemmer)提供了一个巧妙的解决方法。
$ tar -czh . | docker build -
Run Code Online (Sandbox Code Playgroud)
这告诉tar取消引用当前目录中的符号链接,然后将它们全部通过管道传递给docker build -命令。
-c, --create
create a new archive
-h, --dereference
follow symlinks; archive and dump the files they point to
-z, --gzip, --gunzip --ungzip
Run Code Online (Sandbox Code Playgroud)