2017-10-16 6 views
0

도커 이미지를 빌드하는 동안 모든 후속 "RUN"명령에 대해 자동으로 일부 환경 변수를 설정하고 싶습니다.도커 우분투 환경 변수

그러나 이러한 변수를 설정하는 것은 내부 논리에 따라 달라지기 때문에이 변수를 도우커 conatiner에서 설정하고 싶습니다.

dockerfile "ENV"명령을 사용하면 내부 논리에 의존 할 수 없으므로 좋지 않습니다. (도커 컨테이너 내부에서 실행되는 명령에 의존 할 수 없음)

일반적으로 ~/.profile 파일을 설정합니다. 그러나 docker는 비대화 형 쉘에서이 파일을로드하지 않습니다. 나는 떠들썩한 파티 명령을 실행하려면이 모든 시간을 반복해야 할 때

RUN bash -c "source ~/.profile && do_something_here" 

그러나, 이것은 매우 지루한 (부정한)입니다 :

그래서 그들에서 순간 나는 각 고정 표시기의 RUN 명령을 실행해야 . 대신에 사용할 수있는 다른 "프로필"파일이 있습니까?

답변

0

비슷한 문제가있어 만족스러운 해결책을 찾을 수 없습니다. 내가 한 일은 변수를 제공하는 스크립트를 작성한 다음 작업을 수행하는 것입니다. 그런 다음 Dockerfile에있는 RUN 명령을 다시 작성하여 해당 스크립트를 대신 사용합니다.

여러 명령을 실행해야하는 경우 변수를로드하고 인수로 주어진 명령을 실행 한 다음 해당 스크립트를 도커 이미지에 포함시키는 래퍼를 만들 수 있습니다.

0

후속 RUN의 설정 ENV를 사용할 수 있도록 Dockerfile, 이 ARG my_env ENV my_env=${my_env} 처럼 ENV으로 인수를 설정 시도하고 빌드 인수에 'my_env = 자극'을 통과 할 수는 당신이 할 수있는 명령 또한 도커에있는 env_file: 옵션을 사용하여 스택이있는 경우 yml 파일을 작성하십시오.

+0

제 질문은 변수의 값을 결정하는 로직이 컨테이너 내부에서 실행된다는 것입니다. 그러한 제안은 내가 도미노 파일을 콘테이너에서 변경해야한다는 것을 의미합니까? 나는 그것이 가능하다고 생각하지 않는다 ... – eshalev

+0

위의 방법이 가능하며, 만약 당신이 논리를 가지고 있다면, 다른 방법으로 env 변수를 설정하기위한 어떤 논리도 없다면 그것을 사용했다.'CMD'에서 스크립트를 실행 중이다. 그래서 컨테이너를 시작할 때마다 스크립트가 실행되고 env가 로직에 따라 설정됩니다. 예를 들어 Tomcat 어플리케이션을 실행하려면'#!/bin/ash 또는 bash 로직 스크립트 &&/path/of/tomcat/catalina와 같은 스크립트를 작성하십시오. sh '는 그 스크립트를 CMD에 넣는다. – Vignajeth