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
中的Dockerfile
path。
docker build -f worker-a/Dockerfile . docker build -f worker-b/Dockerfile .
你将不得不稍微修改你的Docker文件,把它们指向../config/config.json
,但是修复起来很../config/config.json
。
也检查出这个问题/答案,我认为解决您遇到完全相同的问题。
如何在Docker的构build上下文之外包含文件?
希望这可以帮助! 干杯