2016-10-19 46 views
0

我有一個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包我有一個腳本,調用該腳本的dockerfile構建它該腳本確實

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" 

但是我們詹金斯建立當矩形框它給我的錯誤

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 /詹金斯從站/工作區/ dockerbuild存在,因爲它可以找到dockerfile但我不」知道爲什麼它不會複製SRC

回答

0

的路徑在泊塢窗都是相對的,所以只是作爲一個實驗,你可以試試下面的你在哪裏複製源:

WORKDIR $src 
COPY . /home/default 
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