我有一个npm包,我们保存公共代码并将其发布到内部存储库。包名称为docker-images
。在里面,我有一个带有以下
FROM <Our internal base image>
# Setting src variable.
ARG src
# Set working directory
WORKDIR /home/default
USER root
# Copy the src code
COPY $src /home/default
# Install all the dependencies
RUN npm install
# Change permissions to default user and ensure we enter at the right spot
RUN chown -R default:default /home/default
USER default
同样在这个包中我有一个shell脚本,用于构建
OPTIND=1 # Reset getopts in case it was changed in a previous run
while getopts "h::f::s::" opt; do
case "$opt" in
h)
exit 1
;;
f)
dockerfile=$OPTARG
;;
s)
src=$OPTARG
;;
*)
exit 1
;;
esac
done
docker build --pull=true --build-arg "src=${src}" --tag="latest" --file=${dockerfile} ${src}
从另一个npm包中我有一个脚本调用此脚本来构建脚本
npm install docker-images
PKG_ROOT=$(cd "$(dirname "$BASH_SOURCE")" && cd ../ && pwd)
./node_modules/docker-images/scripts/publish.sh -f "$PKG_ROOT/node_modules/docker-images/dockerfiles/dockerfile" -s "$PKG_ROOT"
然而,当我们的jenkins盒子上构建时,它会给我错误
Step 3 : ARG src
---> Using cache
---> 09e6987081e7
Step 4 : WORKDIR /home/default
---> Using cache
---> d4f1edf337ca
Step 5 : USER root
---> Using cache
---> f5e52439f60f
Step 6 : COPY $src /home/default
lstat home/jenkins-slave/workspace/dockerbuild: no such file or directory
我还打印出我的shell脚本正在调用的命令
docker build --pull=true --build-arg src=/home/jenkins-slave/workspace/dockerbuild --file=/home/jenkins-slave/workspace/dockerbuild/node_modules/docker-images/dockerfiles/dockerfile /home/jenkins-slave/workspace/dockerbuild
显然路径/ home / jenkins-slave / workspace / dockerbuild存在,因为它可以找到dockerfile但我不知道为什么它不会复制src
答案 0 :(得分:0)
docker中的路径都是相对的,因此就像实验一样,您可以尝试以下复制源的位置:
WORKDIR $src
COPY . /home/default
答案 1 :(得分:0)
Rambler是正确的,路径需要相对于Docker构建上下文,但您不需要更改Dockerfile,只需使用build-arg
值中的相对路径即可。
使用这个简单的Dockerfile:
FROM alpine
ARG src
COPY $src .
如果在参数中使用完整路径,则会出现失败:
> docker build -t temp --build-arg src=/home/scrapbook/tutorial/src .
...
Step 3 : COPY $src .
lstat home/scrapbook/tutorial/src: no such file or directory
但是如果你使用构建上下文中的相对路径,那么相同的Dockerfile就可以了:
> docker build -t temp --build-arg src=./src .
...
Successfully built d4899d51a284