无法使用docker build复制源代码

时间:2016-10-19 05:16:41

标签: docker dockerfile

我有一个npm包,我们保存公共代码并将其发布到内部存储库。包名称为docker-images。在里面,我有一个带有以下

的dockerfile
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

2 个答案:

答案 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