2016-09-23 4 views
1

도커 빌드 중에 일부 환경 변수를 설정하는 bash 스크립트를 실행해야합니다.도커 빌드 중 구성 bash 스크립트 실행

스크립트는 다음과 같은 :

#!/bin/bash 

export ENVVAR=TEST 
export HOST=local 
export PORT=port 

나는 다른 방법으로 내 dockerfile이 스크립트를 호출하려고하지만 그들 중 누구도이 작동하지 않습니다. 나는 이것들을 시도했다 :

ADD ./myscript.sh 
RUN chmod +x /myscript.sh;\ 
    /bin/bash -c 'source ./myscript.sh';\ 
    /bin/bash -c 'source /myscript.sh';\ 
    /bin/bash -c source ./myscript.sh;\ 
    /bin/bash -c source /myscript.sh;\ 
    source ./myscript.sh;\ 
    source /myscript.sh;\ 
    /myscript.sh;\ 
    ./myscript.sh;\ 

ENTRYPOINT ["/bin/bash"] 

물론 나는이 명령 중 하나를 내 RUN에 가지고 있었고 여기에 그룹화했다.

컨테이너를 실행하고 source ./myscript.sh을 사용하면 예상대로 작동합니다.

여러 가지 제한 사항과 다른 이유 때문에 docker 작성 또는 -e 인수, dockerfile의 ENV KEY VALUE 또는 유사한 접근법을 사용할 수 없습니다. 도커 빌드 프로세스 중에 환경 변수를 설정해야합니다.

답변

1

ENTRYPOINT에 지정된 셸을 단순히 소싱하는 것이 아닙니다. myscript.sh를 이미지에 추가하기 만하면됩니다 (ADD 대신 COPY 사용).

COPY myscript.sh /usr/local/bin 

그러면 엔트리 포인트에 의해 실제로 시작된 쉘에서 소스를 가져와야합니다.

docker run myimage source /usr/local/bin/myscript.sh 

btw, myscript.sh는 꽤 설명 적이 지 않습니다. 예를 들어 env.sh를 사용할 수 있습니다.

+0

감사합니다. 그러나 나중에 환경 변수 설정에 따라 셸 스크립트를 사용하여 추가 실행이 있으면 어떻게해야합니까? 'RUN/configure.sh' <- 이것은 미리 설정 한 환경 변수에 의존합니다. 그것들을 함께 가지지 않는 것은 격리와 구조화의 이유 때문입니다. – sceiler

+1

그런 다음 configure.sh를 실행하기 전에 쉘을 소스하십시오. 예 :'RUN source myscript.sh && configure.sh' – Alkaline