in DevOps with Docker

Docker 컨테이너 /etc/hosts 파일 수정하기

Docker 컨테이너를 만들때 사내 사이트 dns에 대한 정보를 hosts 파일에 넣어야 하는 상황이 생겼습니다. 처음에는 간단하게 생각했습니다.

표준 이미지를 만들때 표준으로 사용하는 hosts 파일을 복사하자.

Dockerfile의 COPY 명령어로 해결될줄 알았는데 해당 url에 대한 ip가 다르게 나와서 확인해보니 아래 링크를 찾았습니다.

Editing networking config files

Starting with Docker v.1.2.0, you can now edit /etc/hosts, /etc/hostname and /etc/resolve.conf in a running container. This is useful if you need to install bind or other services that might override one of those files.

Note, however, that changes to these files will not be saved by docker commit, nor will they be saved during docker run. That means they won’t be saved in the image, nor will they persist when a container is restarted; they will only “stick” in a running container.

출처: https://docs.docker.com/articles/networking/

요약하면 /etc/hosts, /etc/hostname, /etc/resolve.conf 와 같은 네트워크 설정 파일을 실행중인 컨테이너에서만 유지된다는 설명입니다. 이를 지원하는 옵션이 RUN 명령에 들어있습니다.
$ /docker run -ti –add-host db-static:86.75.30.9 ubuntu cat /etc/hosts

RUN 명령어 문서: https://docs.docker.com/reference/run/
–add-host 옵션뒤에 dns:ip 와 같이 적어주면 etc/hosts 파일안에 내용이 추가된것을 확인할 수 있습니다.

이 설정을 docker-compose.yml에서도 추가할수 있습니다.

extra_hosts:

– “somehost:162.242.195.82”

extra_hosts는 docker 클라이언트의 –add-host와 동일하게 맵핑됩니다.

Write a Comment

Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.