2016-07-14 2 views
0

우리가 능숙하게 사용할 수 있도록 도커 이미지를 만듭니다.Docker : 컨테이너 시작시 파일에서 단어를 변경하십시오.

<store> 
    type http 
    endpoint_url ENDPOINTPLACEHOLDER 
    http_method  post # default: post 
    serializer  json # default: form 
    rate_limit_msec 100 # default: 0 = no rate limiting 
    raise_on_error true # default: true 
    authentication none # default: none 
    username  xxx # default: '' 
    password  xxx # default: '', secret: true 
</store> 

그래서 이것이 우리의 이미지에 있습니다 이미지가 포함 된 http_forward.conf라는 파일이 포함되어 있습니다. 그러나 우리는 모든 환경에 이미지를 사용하고 싶습니다. 환경 변수로 지정됩니다.

그래서 우리는 우리의 환경에 대한 환경 변수를 만들 :

ISSUE_SERVICE_URL = http://xxx.dev.xxx.xx/api/fluentdIssue 

이 ENV 변수는 UAT 우리가 우리의 ENV의 값으로 우리 ENDPOINTPLACEHOLDER를 대체 할보다 UAT 등 에, 우리의 dev에 환경에 dev에 포함 변하기 쉬운. 배쉬에서 우리는 사용할 수 있습니다

sed -i -- 's/ENDPOINTPLACEHOLDER/'"$ISSUE_SERVICE_URL"'/g' .../http_forward.conf 

하지만 어떻게/때 우리는 우리가 우리의 고정 표시기 컨테이너에서 이것을 사용하려면이 명령을 실행해야합니까? (우리는이 파일을 마운트하고 싶지 않습니다)

답변

0

당신은 어딘가에 CMD로 시작하는 라인이 있어야합니다. 거기에 추가해야합니다.

또는 더 깨끗하게 할 수 있습니다. CMD 행을 설정하여 대신 스크립트를 호출하십시오. 예 : CMD ./startup.sh. 그러면 startup.sh 파일에는 sed 명령과 fluentd를 시작하는 명령이 포함됩니다 (현재 CMD라고 가정합니다).

1

우리는 ansible 코딩을 통해 이것을했습니다.

http_forward.conf 파일을 템플릿으로 저장하고 환경에 따라 변경 사항을 적용한 다음 폴더 (도크 파일 포함)를 도커 컨테이너에 마운트합니다.

플레이 북은 이와 같은 형태가 될 것입니다. 테스트하지 않습니다. 당신의 DockerFile에서

- template: src=http_forward.conf.j2 dest=/config/http_forward.conf mode=0644 

- docker: 
     name: "fluentd" 
     image: "xxx/fluentd" 
     restart_policy: always 
     volumes: 
     - /config:/etc/fluent 
+0

좋은 해결책, 내가 upvote거야하지만 helptools없이 방법을 찾으려고 – DenCowboy