2017-10-19 5 views
2

Docker가 이미지 정의에서 설정 한 환경 변수가 설정되지 않은 컨테이너를 만드는 데 문제가 있습니다.Docker에서 환경 변수 설정

나는 OpenSuse 42.3의 이미지를 생성하는 Dockerfile을 만들었습니다. 이미지에서 컨테이너를 시작한 사람이 내가 컴파일하고 이미지에 배치 한 코드를 사용할 수 있도록 이미지에 환경 변수를 설정해야합니다.

필자는 필요한 환경 변수 정의가 포함 된 "image_env_setup.sh"라는 쉘 파일을 만들었습니다. 또한 Dockerfile에 수동으로 환경 변수 정의를 추가했습니다.

USER codeUser 
COPY ./docker/image_env_setup.sh /opt/MyCode 

ENV PATH="$PATH":"/opt/MyCode/bin:/usr/lib64/mpi/gcc/openmpi/bin" 
ENV LD_LIBRARY_PATH="/usr/lib64:/opt/MyCode/lib:" 
ENV PS1="[\[email protected]: \w]\$ " 
ENV TERM="xterm-256color" 
ENV GREP_OPTIONS="--color=auto" 
ENV EDITOR=/usr/bin/vim 

USER root 
RUN chmod +x /opt/MyCode/image_env_setup.sh 
USER codeUser 
RUN /opt/MyCode/image_env_setup.sh 
RUN /bin/bash -c "source /opt/MyCode/image_env_setup.sh" 

내가 용기를 만드는 데 사용하는 명령은 다음과 같습니다

docker run -it -d --name ${containerName} -u $userID:$groupID   \ 
      -e USER=$USER --workdir="/home/codeUser"   \ 
      --volume="${home}:/home/codeUser" ${imageName} /bin/bash \ 

작동하는 유일한 것은 용기가 시작될 때 다시 실행되는 쉘 파일을 전달하는 것입니다.

docker start $MyImageTag 
docker exec -it $MyImageTag /bin/bash --rcfile /opt/MyCode/image_env_setup.sh 

나는 그것이있을 거라고 생각하지 않았다 어려워으로 어떤 항목이 그들과 함께 사용자가 이미 정의를 제공 할 수 있도록 컨테이너 내의 쉘 변수 설정을 단지를합니다.

+1

이'alias' 쉘 명령입니다한다; 'ENV'가 수정하는 환경과 아무 관련이 없습니다. – chepner

+0

감사합니다. @chepner. 나는 그것을 편집했다. 나를 위해 가장 중요한 부분은 PATH와 LD_LIBRARY_PATH 환경 변수를 적절하게 설정하는 것입니다. 다른 것들은 컨테이너에 입장 할 때 사용자가 보는 디스플레이에 관한 미학적 인 것들입니다. – wandadars

답변

2

난 당신이 원하는 가정 (환경 변수를 수정할 수 없습니다 RUN 항목 image_env_setup.sh에 더 많은 변수를 설정하십시오.) Dockerfile의 ENV 항목 (--rcfile과 같은 도커 옵션은 환경을 변경할 수 있음).

물론 .bashrc에서 image_env_setup.sh 소스를 결정할 수도 있습니다.

예를 들어, 당신이 중 하나 .bashrc 사전 제작 수 있고 COPY 그것을에서 잡아 당기거나

RUN echo '. /opt/MyCode/image_env_setup.sh' >> ~/.bashrc 
+0

나는 본다. image_env_setup.sh 파일에 설정된 대부분의 변수는 Dockerfile 예제에 있습니다. .bashrc에서 image_env_setup.sh를 소싱하는 방법은 무엇입니까? 이 문제가 어디에서 발생합니까 (Dockerfile, docker run 명령 등)? – wandadars

+1

내 편집보기, @wandadars – AnoE

+0

@AnoE가 표시되지만 >> .bashrc 명령에 어떤 디렉토리가 포함되어 있습니까? 그것은 내가 거기에있는 디렉토리가 .bashrc 파일이 될 것이라고 가정하는 것처럼 보입니다. 그것은 일반적으로 "/ home/codeUser"디렉토리에 있습니다. 호스트의 홈 디렉토리를 컨테이너의 홈 디렉토리에 마운트 중입니다. 즉, .bashrc 파일이 호스트에있는 것입니다. 실제로 컨테이너 홈의 하위 디렉토리에 호스트의 홈 디렉토리를 마운트해야합니까? – wandadars

0

당신은에 /opt/MyCode/image_env_setup.sh를 넣을 수 있습니다 ~/.bash_profile을하거나 ENV의이

를 설정하면 컨테이너에 들어가 그 때마다 있도록 용기의 ~/.bashrc에