2016-07-11 32 views
19

Chcę zaktualizować mój plik /etc/hosts podczas "budowania dockera".Jak zaktualizować plik/etc/hosts w obrazie Docker podczas "budowania dockera"

Dodałem poniżej wiersz w pliku Dockerfile, ale nie aktualizuje on pliku /etc/hosts ani nie daje żadnego błędu.

RUN echo "192.168.33.11 mynginx" >> /etc/hosts 

Muszę zaktualizować /etc/hosts. Czy ktoś może sugerować na ten temat?

+0

Używasz boot2docker wykonać swoją doker budować? – VonC

+0

Nie, używam wersji 1.8 systemu dokowania dla systemu Linux. –

+1

A kiedy wyświetlasz swój obraz jako kontener, jego/etc/hosts pozostało niezmienione? A może polecałeś swojego hosta/etc/hosts? – VonC

Odpowiedz

22

Z nowszych wersji docker, można to zrobić z Docker-komponować i jego extra_hosts directive

Dodaj mapowania hosta.
Użyj tych samych wartości, co docker run client --add-host parameter (które powinny być już dostępne dla okna dokowanego 1.8).

extra_hosts: 
- "somehost:162.242.195.82" 
- "otherhost:50.31.209.229" 

W skrócie: modyfikować /etc/hosts swojego pojemnika po uruchomieniu go, a nie ją buduje.

+0

Chcę zmienić/etc/hosts na obrazie docker. –

+0

@PrakashSingh Zgadzam się, ale nie wydaje się to łatwe. – VonC

+0

Nikt nie zaimplementował tego przypadku użycia? –

0

Obserwowany pracował dla mnie przez montowanie pliku podczas dokowanym uruchomić zamiast dokowanym budować

docker service create --name <name> --mount type=bind,source=/etc/hosts,dst=/etc/hosts <image> 
5

Nie można zmodyfikować plik hosta za pomocą echo w kroku RUN ponieważ doker utrzyma plik, gdy będziesz go uruchomić i zawartość pliku będzie zarządzana przez dokowanie.

jednak następujące mogą być wykorzystane do osiągnięcia takie same:

ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec java -jar ./botblocker.jar " ] 

Key zauważyć tutaj jest użycie polecenia exec jak sugeruje dokumentacja doker. Zastosowanie polecenia java jako PID 1 dla kontenera spowoduje użycie polecenia java. Przerywające Docker zareagują tylko na to.

Zobacz https://docs.docker.com/engine/reference/builder/#entrypoint

+0

ty! to jest świetne rozwiązanie – xero

+0

Jeśli szukasz rozwiązania kubenetes, możesz użyć hostAliases. https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ podobnie jak docker komponują extra_hosts. –

-3

Tylko szybka odpowiedź uruchomić kontenera przy użyciu:

docker exec -it <container name> /bin/bash 

gdy pojemnik jest otwarty:

cd .. 

następnie

`cd etc` 

a następnie można

cat hosts 

czyli

apt-get update 
apt-get vim 

lub dowolny edytor chcesz i otwórz go w vim, tutaj można modyfikować powiedzieć swoje ip startowy do 0.0.0.0