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.