wake-up-neo.net

So aktualisieren Sie die Datei / etc / hosts im Docker-Image während der Docker-Erstellung

Ich möchte meine /etc/hosts - Datei während der "Docker-Erstellung" aktualisieren.

Ich habe die folgende Zeile in Dockerfile hinzugefügt, aber es wird weder die /etc/hosts - Datei aktualisiert noch ein Fehler ausgegeben.

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

Ich muss /etc/hosts Aktualisieren. Kann jemand dies vorschlagen?

72
Prakash

Bei einer neueren Version von docker könnte dies mit docker-compose und der Direktive extra_hosts geschehen

Hostnamenzuordnungen hinzufügen.
Verwenden Sie die gleichen Werte wie der docker run - Client --add-Host - Parameter (sollte bereits für Docker 1.8 verfügbar sein).

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

Kurz gesagt: Ändern Sie /etc/hosts Ihres Containers, wenn Sie ihn ausführen, und erstellen Sie ihn nicht.


Mit Docker 17.x + haben Sie ein docker build --add-Host erwähnt nten , aber wie in Ausgabe 34078 und in - kommentiert diese Antwort :

Die Funktion --add-Host Während des Builds wurde entwickelt, um das Überschreiben eines Hosts während des Builds zu ermöglichen, diese Konfiguration im Image jedoch nicht beizubehalten.

Die genannten Lösungen beziehen sich auf das Docker-Compose, das ich oben vorgeschlagen habe:

  • Führen Sie einen internen DNS aus. Sie können den im Dämon zu verwendenden Standard-DNS-Server festlegen. Auf diese Weise verwendet jeder gestartete Container standardmäßig automatisch das konfigurierte DNS
  • Verwenden Sie Docker Compose und geben Sie Ihren Entwicklern einen docker-compose.yml.
    In der Docker-Erstellungsdatei können Sie alle Optionen angeben, die beim Starten eines Containers verwendet werden sollen. Entwickler können also einfach Docker-Erstellungen erstellen, um den Container mit allen Optionen zu starten, die sie festlegen müssen.
108
VonC

Sie können die Host-Datei im Image nicht mit dem Schritt echo in RUN ändern, da der Docker-Dämon die Datei (/ etc/hosts) und ihren Inhalt (hosts-Eintrag) verwaltet, wenn Sie einen Container starten aus dem Bild.

Folgendes kann jedoch verwendet werden, um dasselbe zu erreichen:

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 " ]

Hier ist vor allem die Verwendung des Befehls exec zu beachten, wie in der Docker-Dokumentation vorgeschlagen. Die Verwendung von exec ergibt den Befehl Java als PID 1 für den Container Docker-Interrupts reagieren nur darauf.

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

19
Shubham Singh

Ich denke, Docker hat vor kurzem die --add-Host flag to docker build das ist wirklich toll.

[Bearbeiten] Diese Funktion wurde also am 17.04.0-ce aktualisiert

Weitere Informationen zur Verwendung von docker build mit dem --add-Host flag bitte besuchen Sie: https://docs.docker.com/Edge/engine/reference/commandline/build/

15
Bill Cheng

Da dies bei Google noch als erste Antwort auftaucht, werde ich mögliche Lösungsvorschläge einbringen.

Befehl aus hier funktionierte überraschenderweise für mich (Docker 1.13.1, Ubuntu 16.04):

docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name> >> /etc/hosts"
9
Remy

Wenn dies für jemanden nützlich ist, hat die Variable HOSTALIASES env für mich funktioniert:

echo "fakehost realhost" > /etc/Host.aliases
export HOSTALIASES=/etc/Host.aliases
4
user10805445

Sie können zum Zeitpunkt der Ausführung von docker den folgenden Befehl ausführen

docker run [OPTIONS] <your-image-name>:<your tag> --add-Host example.com:127.0.0.1

Hier kartiere ich example.com zu localhost 127.0.0.1 und seine Arbeitsweise.

2
Asad Shakeel

Ich verwende AWS Elasticbeanstalk + Docker + Supervisord.

Schnelle Antwort

Fügen Sie einfach Code in Dockerfile ein.

CMD echo 123.123.123.123 this_is_my.Host >> /etc/hosts; supervisord -n;
1
Jay Lim
Tis is me Dockefile
FROM XXXXX
ENV DNS_1="10.0.0.1 TEST1.COM"
ENV DNS_1="10.0.0.1 TEST2.COM" 
CMD ["bash","change_hosts.sh"]`

#cat change_hosts.sh
su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"
  • die Info
  • benutzer muss su
0
Name Last