2017-09-15 3 views
2

환경 변수 CLASSPATH을 설정해야합니다. 그 변수에서 나는 명령의 결과 설정해야합니다 : 이것은 자바 라이브러리의 톤을 반환합니다Docker가 명령 또는 파일에서 환경 변수를 설정하십시오.

hadoop classpath --glob 

을 그들은 모두 그 CLASSPATH 변수로 설정하는 데 필요한. 큰 문제는 도커 빌드가 완료된 후에 만이 명령을 실행할 수 있다는 것입니다. 즉, ENTRYPOINT에서해야합니다. 그러나 나는 단지 그것을 작동시키지 않는다. 나는 differen 접근을 시도했다 :

ENTRYPOINT ["sh", "-c", "export CLASSPATH=$(hadoop classpath --glob) ...." 
ENTRYPOINT ["sh", "-c", "set CLASSPATH=$(hadoop classpath --glob) ...." 
ENTRYPOINT ["sh", "-c", "CLASSPATH=$(hadoop classpath --glob) ...." 
ENTRYPOINT ["sh", "-c", "/bin/bash && export CLASSPATH=$(hadoop classpath --glob) ...." 

그러나 그것의 아무것도 작동하지 않는다. 명령 자체가 작동 중이며 다음을 사용하여 테스트했습니다.

ENTRYPOINT ["sh", "-c", "echo $(hadoop classpath --glob) >> /tmp/classpath.tmp ...." 

이 파일에는 시작한 후에 올바른 내용이 들어 있습니다. 따라서 환경 변수를 설정하고 유지하는 데는 문제가 있습니다. 환경 변수를 어떻게 설정해야합니까? 내가 sh -cSHELLsh -lc 대신 배쉬 프로파일 변경을 사용하는 것을 선호 일반적으로 당신은

ENV CLASSPATH="some classpath" 

같은 것을 사용하지만 늘이 경우 명령 $(hadoop classpath --glob)

답변

0

그 문제를 해결할 수있는 유일한 해결책은 t o 에있는 ENTRYPOINT을 전혀 사용하지 마십시오.

  1. entrypoint.sh
  2. 당신이 고정 표시기 실행에 /
  3. Execut의 entrypoint.sh 해당 쉬 파일 dockerfile에서
  4. 복사 entrypoint.sh에 (예를 들어 수출)을 필요로하는 모든 물건을 추가 만들거나 도커 구성도

주의 : . /entrypoint.sh으로 실행해야합니다. 그렇지 않으면 작동하지 않을 것입니다.

1

를 처리하기 때문에 여기에 내가 ENV 문을 사용하지 못할

Dockerfile

FROM alpine 
RUN echo "export NAME=TARUNLALWANI" >> ~/.profile 
RUN echo $NAME 
SHELL ["sh", "-lc"] 
RUN echo $NAME 
CMD env 

$ docker build . --no-cache 
Step 1/6 : FROM alpine 
Step 2/6 : RUN echo "export NAME=TARUNLALWANI" >> ~/.profile 
Step 3/6 : RUN echo $NAME 

Step 4/6 : SHELL sh -lc 
Removing intermediate container a6a243f24519 
Step 5/6 : RUN echo $NAME 
TARUNLALWANI 
Successfully built 054f35a4d89a 

당신이 우리의 프로파일을로드 sh -csh -lc 시작에서 SHELL을 변경 볼 수 있듯이 빌드의

출력. 그래서 당신은 용기를 실행

에 따라 CLASSPATH를 내보낼 .profile를 업데이트합니다

$ docker run 054f35a4d89a 
HOSTNAME=92c4ca32b1f0 
SHLVL=1 
HOME=/root 
PAGER=less 
PS1=\h:\w\$ 
NAME=TARUNLALWANI 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
PWD=/ 
CHARSET=UTF-8 

편집-1

프로파일의 필요없이이 시도

ENTRYPOINT [] 
CMD ["/bin/sh", "-c", "export CLASSPATH=$(hadoop classpath --glob) && env"] 
+0

답장을 보내 주셔서 감사합니다.하지만이 방법은 효과가 없습니다. 당신이 정말로 필요로하는 이름으로 당신의 이름을 대체 할 때 나는'Run echo "export NAME = TARUNLAWANI >> >> ~/.profile을 할 수 없습니다. 왜냐하면'hadoop classpath --glob'입니다. 왜냐하면 지금은 hadoop이 시작되지 않았기 때문에 오류가 발생했을 것입니다 아직. 모든 것이 빌드 된 후에 만이 명령을 실행할 수 있습니다. – Mulgard

+0

그런 다음 Dockerfile의 마지막 명령에서 셸을 변경하십시오. –

+0

셸을 변경하는 방법에 대해 이해하지 못합니다. – Mulgard

관련 문제