Ich bin nicht sicher, ob ich hier etwas falsch verstanden habe, aber es scheint, dass es nur möglich ist, Portzuordnungen festzulegen, indem aus einem Image ein neuer Container erstellt wird. Gibt es eine Möglichkeit, einem vorhandenen Docker-Container eine Portzuordnung zuzuweisen?
docker
port
lxc
linux-containers
Thasmo
quelle
quelle
Antworten:
Sie können die Portzuordnung ändern, indem Sie die
hostconfig.json
Datei direkt unter bearbeiten/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json
Sie können den [Hash_des_Containers] über den
docker inspect <container_name>
Befehl ermitteln, und der Wert des Felds "Id" ist der Hash.Mit diesem Ansatz müssen Sie also kein Bild erstellen. Sie können hier auch das Neustart-Flag ändern.
PS Sie können https://docs.docker.com/engine/admin/ besuchen , um zu erfahren, wie Sie Ihre Docker-Engine gemäß Ihrem Host-Computer korrekt neu starten. Ich habe
sudo systemctl restart docker
meine Docker-Engine, die unter Ubuntu 16.04 ausgeführt wird , neu gestartetquelle
hostconfig.json
undconfig.v2.json
diese Arbeit zu machen. Verwenden Sie den von @rohitmohta bereitgestellten Link, um die Details anzuzeigen.screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Sobald Sie die tty zum Laufen gebracht haben, können Sie Navigieren Sie zu / var / lib /Ich interessiere mich auch für dieses Problem.
Wie bei @Thasmo erwähnt, können Portweiterleitungen NUR mit dem Befehl
docker run
(unddocker create
) angegeben werden.Andere Befehle haben
docker start
keine-p
Option und zeigendocker port
nur aktuelle Weiterleitungen an.Um Portweiterleitungen hinzuzufügen, befolge ich immer die folgenden Schritte:
Container nicht mehr laufen lassen
Commit den Container
HINWEIS: Das obige
test02
ist ein neues Bild, das ich aus demtest01
Container konstruiere .Wieder Lauf vom commited Bild
Dabei ist der erste 8080 der lokale Port und der zweite 8080 der Containerport.
quelle
docker start
?Wenn mit "vorhanden" "ausgeführt" gemeint ist, ist es (derzeit) nicht möglich, eine Portzuordnung hinzuzufügen.
Sie können jedoch dynamisch eine neue Netzwerkschnittstelle mit z. B. Pipework hinzufügen , wenn Sie einen Dienst in einem laufenden Container verfügbar machen müssen, ohne ihn anzuhalten / neu zu starten.
quelle
Sie sind sich nicht sicher, ob Sie die Portzuordnung auf einen laufenden Container anwenden können. Sie können die Portweiterleitung anwenden, während Sie einen Container ausführen, der sich vom Erstellen eines neuen Containers unterscheidet.
startet den Container. In diesem Tutorial wird die Portumleitung erläutert.
quelle
docker run
erstellt und startet einen neuen Container. Es ist gleichbedeutend mit Tun,docker create
gefolgt vondocker start
.Das Bearbeiten von hostconfig.json scheint jetzt nicht zu funktionieren. Es endet nur damit, dass dieser Port verfügbar gemacht, aber nicht für den Host veröffentlicht wird. Das Festschreiben und Neuerstellen von Containern ist für mich nicht der beste Ansatz. Niemand erwähnt
docker network
?Die beste Lösung wäre die Verwendung eines umgekehrten Proxys innerhalb desselben Netzwerks
Erstellen Sie ein neues Netzwerk, wenn sich Ihr vorheriger Container nicht in einem benannten befindet.
docker network create my_network
Verbinden Sie Ihren vorhandenen Container mit dem erstellten Netzwerk
docker network connect my_network my_existing_container
Starten Sie einen umgekehrten Proxy-Dienst (z. B. nginx), der die benötigten Ports veröffentlicht und sich demselben Netzwerk anschließt
docker run -d --name nginx --network my_network -p 9000:9000 nginx
Entfernen Sie optional die Datei default.conf in nginx
docker exec nginx rm /etc/nginx/conf.d/default.conf
Erstellen Sie eine neue Nginx-Konfiguration
Kopieren Sie die Konfiguration in den Nginx-Container.
docker cp ./my_conf.conf nginx:/etc/nginx/conf.d/my_conf.conf
Starten Sie nginx neu
docker restart nginx
Vorteile : Um neue Ports zu veröffentlichen, können Sie den Nginx-Container sicher stoppen / aktualisieren / neu erstellen, ohne den Geschäftscontainer zu berühren. Wenn Sie für nginx keine Ausfallzeit benötigen, können Sie weitere umgekehrte Proxy-Dienste hinzufügen, die demselben Netzwerk beitreten. Außerdem kann ein Container mehr als einem Netzwerk beitreten.
Bearbeiten:
Um Proxy-Nicht-http-Dienste umzukehren, ist die Konfigurationsdatei etwas anders. Hier ist ein einfaches Beispiel:
quelle
In Fujimoto ist Youichis Beispiel
test01
ein Container, währendtest02
es sich um ein Bild handelt.Bevor
docker run
Sie dies tun , können Sie den Originalcontainer entfernen und dem Container erneut denselben Namen zuweisen:(Verwenden
-P
, um Ports zufälligen Ports auszusetzen, anstatt sie manuell zuzuweisen).quelle
Wenn Sie es ausführen
docker run <NAME>
, wird ein neues Bild erzeugt, das höchstwahrscheinlich nicht Ihren Wünschen entspricht.Wenn Sie ein aktuelles Bild ändern möchten, gehen Sie wie folgt vor:
docker ps -a
Nehmen Sie die ID Ihres Zielcontainers und gehen Sie zu:
Stoppen Sie den Container:
Ändern Sie die Dateien
Und Datei ändern
Starten Sie Ihren Docker neu und es sollte funktionieren.
quelle
Der andere Weg um Sie herum, wenn Sie mit Docker-Tiefenkonfiguration IPtables nicht vertraut sind, wäre Ihr Freund.
Dies ist nur ein Trick, der nicht empfohlen wird. Dies funktioniert mit meinem Szenario, da ich den Container nicht stoppen konnte. Ich hoffe, dass er Ihnen auch helfen wird.
quelle
DOCKER_PORT
zuMACHINE_PORT
, sollten die Teile geändert werden?Wir verwenden handliche Tools wie ssh, um dies einfach zu erreichen.
Ich habe Ubuntu Host und Ubuntu-basiertes Docker-Image verwendet.
Wenn ein neuer Port zugeordnet werden muss,
Führen Sie im Docker den folgenden Befehl aus
172.17.0.1 war die IP der Docker-Schnittstelle (Sie können diese erhalten, indem Sie sie
ifconfig docker0 | grep "inet addr" | cut -f2 -d":" | cut -f1 -d" "
auf dem Host ausführen ).Hier hatte ich den lokalen 8888-Port wieder den Hosts 8888 zugeordnet. Sie können den Port nach Bedarf ändern.
Wenn Sie einen weiteren Port benötigen, können Sie den SSH beenden und mit dem neuen Port eine weitere Zeile -R hinzufügen.
Ich habe dies mit Netcat getestet.
quelle
/var/lib/docker/containers/${container_id}
Verzeichnis gehen und bearbeitenhostconfig.json
PortBindings.HostPort
Sie, dass Sie die Änderung möchten.quelle
Als Ergänzung zur Antwort von @ Fujimoto-Youichi
Sie können
$ docker run -P CONTAINER
Ports auch zufällig zuordnen, während Sie Ihren Container erstellen. Seien Sie jedoch vorsichtig mit Sicherheitsaspekten!Führen Sie dann die
docker inspect CONTAINER
Zuordnung der Fin-Ports aus, wie in der folgenden Abbildung dargestellt:.
Lesen Sie mehr über
docker run -P
in Docker Runquelle
Für Windows- und Mac-Benutzer gibt es eine weitere recht einfache und benutzerfreundliche Möglichkeit, den Zuordnungsport zu ändern:
quelle
Kurze Antwort: Sie können einem vorhandenen Docker-Container keine Portzuordnung zuweisen
Sie brauchen einen neuen Container ... kümmern Sie sich darum.
quelle
Wenn Sie einfach den Port des laufenden Containers ändern möchten, gehen Sie wie folgt vor:
wohingegen:
quelle
docker run
Befehl,NAME
der Name des Bildes einen Behälter aus laufen, wohingegen indocker stop
demNAME
auf den Namen des Behälters zu stoppen bezieht.