2016-10-19 2 views
0

공통 코드를 유지하고 내부 리포지토리에 게시하는 npm 패키지가 있습니다. 패키지 이름은 docker-images입니다. 그 내부에서 나는 그와 쉘 스크립트가 나는이 스크립트를 호출하는 스크립트가 다른 NPM 패키지에서 건물docker 빌드로 소스 코드를 복사 할 수 없습니다.

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} 

을 수행해야이 패키지

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 

또한 다음과 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 
는 는

또한 경로/홈/젠킨스 - 슬레이브/작업/dockerbuild이는 dockerfile을 찾을 수 있습니다하지만 난 '돈 때문에 존재 분명히

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 

내 쉘 스크립트를 호출하는 명령을 인쇄 는 SRC에게

답변

0

경로를 복사하지 않습니다 이유 t 알고 고정 표시기의 모든 친척, 실험으로 다음과 같은 복사하는 소스를 시도 할 수 있습니다, 그래서 그냥 있습니다

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 
관련 문제