Chcę zaktualizować mój /etc/hosts
plik podczas „budowania platformy Docker”.
Dodałem poniższą linię w Dockerfile, ale nie aktualizuje /etc/hosts
pliku ani nie podaje żadnego błędu.
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
Muszę zaktualizować /etc/hosts
. Czy ktoś może coś zasugerować w tej sprawie?
docker
dockerfile
hosts
Prakash
źródło
źródło
Odpowiedzi:
W nowszej wersji docker można to zrobić za pomocą docker-compose i jego
extra_hosts
dyrektywyKrótko mówiąc: modyfikuj
/etc/hosts
swój kontener podczas uruchamiania, a nie buduj go.W przypadku Dockera 17.x + masz
docker build --add-host
wspomniany poniżej , ale, jak skomentowano w numerze 34078 i w tej odpowiedzi :Wymienione rozwiązania odnoszą się do docker-compose, które sugerowałem powyżej:
źródło
docket exec -it <container name> /bin/bash
, a następnie zaktualizować host kontenera dockera w / ect / host za pomocą preferowanego edytora wiersza poleceń (vim, emacs, nano, echo ''. >> />).Nie można zmodyfikować plik hosta w obrazie przy użyciu
echo
wRUN
kroku, ponieważ demon Dockera będzie utrzymywał plik (/ etc / hosts) i jego zawartość (wpis hosts) po uruchomieniu kontenera z obrazu.Aby osiągnąć to samo, można jednak użyć następujących rozwiązań:
Kluczem do zauważenia w tym miejscu jest użycie
exec
polecenia, jak sugeruje dokumentacja dockera. Korzystanie z exec sprawi, że polecenie java będzie traktowane jako PID 1 dla kontenera. Przerwania Dockera odpowiedzą tylko na to.Zobacz https://docs.docker.com/engine/reference/builder/#entrypoint
źródło
ENTRYPOINT
nie jest instrukcją dotyczącą obrazu. Zaznacza punkt wejścia tylko wtedy, gdy uruchamiamy kontener z tego obrazu, co oznacza, że wpis hostów istnieje tylko po uruchomieniu kontenera. Nie sądzę, aby wymóg był niezbędny. Musi być jakieś nieporozumienie.Myślę, że docker niedawno dodał
--add-host
flagę do kompilacji dockera, co jest naprawdę świetne.[Edytuj] Więc ta funkcja została zaktualizowana 17.04.0-ce
Aby uzyskać więcej informacji na temat korzystania
docker build
z--add-host
flagi, odwiedź: https://docs.docker.com/edge/engine/reference/commandline/build/źródło
--add-host
funkcja jest dostępna na platformie Docker 12 w systemie CentOS.Ponieważ to wciąż pojawia się jako pierwsza odpowiedź w Google, podam możliwe rozwiązanie.
Komenda pochodzi tu zaskakująco pracował dla mnie (Döcker 1.13.1, Ubuntu 16.04):
źródło
Jeśli jest to przydatne dla kogoś,
HOSTALIASES
zmienna env zadziałała dla mnie:źródło
Możesz to zrobić za pomocą następującego polecenia w czasie uruchamiania dockera
docker run [OPTIONS] --add-host example.com:127.0.0.1 <your-image-name>:<your tag>
Tutaj mapuję
example.com
na localhost127.0.0.1
i jego działanie.źródło
Używam AWS Elasticbeanstalk + Docker + Supervisord.
Szybka odpowiedź
Po prostu dodaj kod
Dockerfile
.źródło
Pełna odpowiedź
hosts
plik, który chcesz dodać do kontenera docker;hosts
plik do kontenera, dodając następujący wiersz wDockerfile
ENTRYPOINT
lubCMD
lubCRON
zadania, włącz do niego następujący wiersz poleceń lub przynajmniej uruchom go w działającym kontenerze:Dockerfile
ponieważ modyfikacja zostanie utracona:źródło
Możesz użyć --add-hostPodczas uruchamiania .
W twoim przypadku użyj: docker run --add-host mynginx: 192.168.33.11 [nazwa_obrazu]: [tag]
To zaktualizuje twój / etc / hosts
możesz to sprawdzić za pomocą następujących poleceń:
jeśli sh nie działa dla Ciebie, możesz spróbować bash lub / bin / sh lub / bin / bash
źródło
źródło
Poniższe pracowały dla mnie, montując plik podczas uruchamiania platformy docker zamiast kompilacji docker
źródło
Szybka odpowiedź, aby uruchomić kontener przy użyciu:
po otwarciu pojemnika:
następnie
a potem możesz
lub:
lub dowolny edytor, który ci się podoba i otwórz go w vimie, tutaj możesz zmienić, powiedzmy, twój startowy ip na 0.0.0.0
źródło