RUN을 사용하여 Dockerfile에서 / etc / hosts 파일에 쓸 수 없습니다


9

꽤 간단한 Dockerfile을 사용하여 도커 이미지를 만들고 있습니다. Dockerfile 내부에는 다음 명령이 있습니다.

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts

이 시점에서 이미지 생성이 중단되지 않기 때문에 명령 자체는 문제가없는 것 같습니다.

문제는 이것입니다 : 이미지를 실행할 때 "/ etc / hosts"안에 삽입 된 줄이 없습니다.

이제 도커 버전 1.2를 검색하기 전에 컨테이너 내부의 호스트 파일에 문제가 있음을 알았습니다. 필자의 경우 현재 현재 최신 버전 1.5를 사용하고 있습니다.

뭔가 빠졌습니까?

업데이트 1 :

docker의 github 페이지 에서이 문제에 대해 많은 문제가있는 것으로 보입니다.

답변:


12

이것은 docker 1.7.0에서 작동합니다.

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

비결은 호스트 이름을 사용하는 것과 같은 줄에 추가하는 것입니다. 그렇지 않으면 모든 RUN 명령이 새 중간 컨테이너를 시작하므로 호스트 파일이 재설정됩니다. 예를 들어, 이것은 작동하지 않습니다 :

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost

1
통찰력에 감사드립니다! 정확하고 (일반적으로 확인) 일반적으로 유용하지만이 경우 실제로 유용하지 않습니다. 컨테이너가 실행될 때 "호스트"파일을 채워야합니다.
dlyk1988

2
같은 줄에서 명령을 실행하면 +1
myol

7

내 질문에 대한 업데이트를 작성한 후 github에서 열린 "문제"를 한 번 더 자세히 살펴보기로 결정했습니다. 해결 방법이 구현되었습니다.

docker run ... --add-host='server:0.0.0.0' ...

컨테이너를 시작할 때 "--add-host ..."인수를 사용하면 hosts 파일을 수정할 수 있습니다.


5
그래도 빌드 에서이 작업을 수행 할 수 있기를 원합니다. 컨테이너를 실행하는 사람은 내부 호스트에 대해 알아야 할 필요가 없습니다. 말이되지 않습니다!
samsamm777

@ samsamm777을 에코합니다. 그렇게하는 좋은 방법이 있는지 궁금하십니까?
Jonathan

이것은 실제로 매우 놀라운 행동이며 IT 시스템에서는 결코 좋은 생각이 아닙니다.
Torsten Bronger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.