Docker和符号链接

我有这样的回购:

/config config.json /worker-a Dockerfile <symlink to config.json> /code /worker-b Dockerfile <symlink to config.json> /code 

但是,构build映像失败,因为Docker无法处理符号链接。 我应该提到我的项目比这更复杂,所以重组目录不是一个好的select。 我该如何处理这种情况?

Docker 不支持构build上下文之外的符号链接文件 。

在容器中使用共享文件的一些不同方法。

分享一个基本的图像

为包含共享configuration/文件的基本worker-config映像创build一个Dockerfile

 COPY config.json /config.json 

构build并标记为worker-config的图像

 docker build -t worker-config:latest . 

为您的所有工作者Dockerfile基础worker-config映像

 FROM worker-config:latest 

构build脚本

使用脚本将常用configuration推送到每个工作容器。

./build worker-n

 #!/bin/sh set -uex rundir=$(readlink -f "${0%/*}") container=$(shift) cd "$rundir/$container" cp ../config/config.json ./config-docker.json docker build "$@" . 

从URL构build

从所有worker-n构build的通用URL中取出configuration。

 ADD http://somehost/config.json / 

增加图像构build上下文的范围

在构build上下文中包含符号链接目标

 cd .. docker build -f worker-a/Dockerfile . 

从卷挂载config目录

像这样的卷只能作为目录使用,所以当从主机将文件挂载到容器时,不能像指定文件那样指定文件。

 docker volume create --name=worker-cfg-vol docker run -v worker-cfg-vol:/config worker-config cp config.json /config docker run -v worker-cfg-vol:/config:/config worker-a 

从数据容器挂载config目录

同样,目录只是基本上与上面相同。 这会自动将目标目录中的文件复制到新创build的共享卷中。

 docker create --name wcc -v /config worker-config /bin/true docker run --volumes-from wcc worker-a 

从主机挂载configuration文件

 docker run -v /app/config/config.json:/config.json worker-a 

docker build CLI命令将指定的目录(通常为. )作为“构build上下文”发送到Docker Engine(守护进程)。 不要将构build上下文指定为/worker-a ,而Dockerfile构build上下文指定为根目录,并使用-f参数指定其中一个Dockerfile中的Dockerfilepath。

 docker build -f worker-a/Dockerfile . docker build -f worker-b/Dockerfile . 

你将不得不稍微修改你的Docker文件,把它们指向../config/config.json ,但是修复起来很../config/config.json

也检查出这个问题/答案,我认为解决您遇到完全相同的问题。

如何在Docker的构build上下文之外包含文件?

希望这可以帮助! 干杯