Docker在上下文之后遵循符号链接

Docker follow symlink outside context

还有一个docker symlink问题。我有一堆文件要复制到所有Docker构建中。我的目录结构是:

1
2
3
4
5
6
parent_dir
    - common_files
        - file.txt
    - dir1
        - Dockerfile  
        - symlink -> ../common_files

在上面的示例中,当我在dir1中docker build时,我希望复制file.txt。但我不想维护file.txt的多个副本。根据此链接,从Docker 0.10版开始,Docker Build必须

Follow symlinks inside container's root for ADD build instructions.

但是当我在dockerfile中使用这些行构建时,我没有得到这样的文件或目录:

ADD symlink /path/dirnameADD symlink/file.txt /path/file.txt

安装选项不会为我解决它(跨平台…)。我没有成功地尝试过tar -czh . | docker build -t

有没有办法让Docker遵循symlink并将common_files/file.txt复制到构建的容器中?


这是不可能的,也不会实现。请看一下关于Github问题的讨论1676:

We do not allow this because it's not repeatable. A symlink on your machine is the not the same as my machine and the same Dockerfile would produce two different results. Also having symlinks to /etc/paasswd would cause issues because it would link the host files and not your local files.


对于其他有此问题的人,请查看此链接。我个人选择了"建立一个共同的基础形象"的解决方案,它工作得很出色。


一种可能是在父目录中运行构建,使用:

1
$ docker build [tags...] -f dir1/Dockerfile .

(或等效地,在子目录中,)

1
$ docker build  [tags...] -f Dockerfile ..

Dockerfile必须配置为使用适当的路径进行复制/添加。根据您的设置,您可能希望父级中的.dockerignore退出你不想被放进上下文的东西。