803 Stimmen

Wie weise ich einem vorhandenen Docker-Container eine Portzuordnung zu?

Ich bin mir nicht sicher, ob ich hier etwas falsch verstanden habe, aber es sieht so aus, als ob es nur möglich ist, Port-Mappings zu setzen, indem man einen neuen Container aus einem Image erstellt. Gibt es eine Möglichkeit, einem vorhandenen Docker-Container ein Port-Mapping zuzuweisen?

38voto

Luca Punkte 403

In Fujimoto Youichi's example test01 is a container, whereas test02 is an image.

Before doing docker run you can remove the original container and then assign the container the same name again:

$ docker stop container01
$ docker commit container01 image01
$ docker rm container01
$ docker run -d -P --name container01 image01

(Using -P to expose ports to random ports rather than manually assigning).

36voto

docker-noob Punkte 391

Wenn Sie docker run ausführen, wird ein neues Image erstellt, was wahrscheinlich nicht das ist, was Sie wollen.

Wenn Sie ein aktuelles Image ändern möchten, führen Sie folgende Schritte durch:

docker ps -a

Notieren Sie die ID des Zielcontainers und gehen Sie zu:

cd /var/lib/docker/containers/

Stoppen Sie den Container:

docker stop 

Ändern Sie die Dateien

vi config.v2.json

"Config": {
    ....
    "ExposedPorts": {
        "80/tcp": {},
        "8888/tcp": {}
    },
    ....
},
"NetworkSettings": {
....
"Ports": {
     "80/tcp": [
         {
             "HostIp": "",
             "HostPort": "80"
         }
     ],

Und ändern Sie die Datei

vi hostconfig.json

"PortBindings": {
     "80/tcp": [
         {
             "HostIp": "",
             "HostPort": "80"
         }
     ],
     "8888/tcp": [
         {
             "HostIp": "",
             "HostPort": "8888"
         } 
     ]
 }

Starten Sie Ihr Docker neu und es sollte funktionieren.

25voto

rofrol Punkte 13060

Den HostPort eines Containers auf Docker Desktop (unter Windows 10 / MacOS) ändern

# alle Container auflisten
$ docker ps -a
$ docker stop docker101tutorial 
# Mit grep die ID des Containers erhalten
$ docker inspect docker101tutorial | grep -i id
        "Id": "sha256:fff0a4b22d6f3d2eb8d2748b8a8bbc9967ea87199988acee8e86ac70bce9c3eb",
# einfaches Ubuntu Docker-Image mit Shell ausführen und dessen Namespace in den Docker-Host ändern
# https://stackoverflow.com/questions/60408574/how-to-access-var-lib-docker-in-windows-10-docker-desktop/60411313#60411313
# https://forums.docker.com/t/the-location-of-images-in-docker-for-windows/19647/4
$ docker run -it --privileged --pid=host ubuntu nsenter -t 1 -m -u -i sh
# Wir möchten den Verzeichnispfad des Containers docker101tutorial herausfinden. Wir suchen nach:
# `"Image":"sha256:fff0a4b22d6f3d2eb8d2748b8a8bbc9967ea87199988acee8e86ac70bce9c3eb"`
# in /var/lib/docker/containers/*/config.v2.json
$ find /var/lib/docker/containers/ -name config.v2.json -exec grep -H fff0a4b22d {} \;
/var/lib/docker/containers/c1eda20b30f058bce9f8ece3b47a21641df5b399770e12ab57416a954d3c8bbf/config.v2.json
# bearbeiten
$ vi /var/lib/docker/containers/c1eda20b30f058bce9f8ece3b47a21641df5b399770e12ab57416a954d3c8bbf/hostconfig.json
  • Drücken Sie i für den Einfügemodus.
  • Ändern Sie "HostPort":"80" in "HostPort":"8092"
  • Drücken Sie Escape und schreiben Sie :wq. Drücken Sie Enter.
  • Starten oder stoppen Sie jetzt docker101tutorial nicht. Andernfalls werden die Änderungen am HostPort rückgängig gemacht.
  • Klicken Sie mit der rechten Maustaste auf das Docker Desktop-Symbol in der Taskleiste und wählen Sie Neustart.
  • In der Liste der Container von Docker Desktop sehen Sie Ihren Container. Der angezeigte Port sollte sich auf 8092 ändern.
  • Starten Sie Ihren Container. Jetzt wird er auf Port 8092

Basierend auf der Antwort von @holdfenytolvaj.

24voto

rajalokan Punkte 481

Nicht sicher, ob Sie das Port-Mapping auf einen laufenden Container anwenden können. Sie können die Port-Weiterleitung anwenden, während ein Container läuft, was sich von der Erstellung eines neuen Containers unterscheidet.

$ docker run -p : -d   

wird den Container starten. Dieses Tutorial erläutert die Portweiterleitung.

18voto

melchi Punkte 567

Wir können praktische Tools wie SSH verwenden, um dies einfach zu erreichen.

Ich habe den Ubuntu-Host und das auf Ubuntu basierende Docker-Image verwendet.

  1. Innerhalb des Docker ist openssh-client installiert.
  2. Außerhalb des Dockers (Host) ist der openssh-server installiert.

wenn ein neuer Port nach außen gemappt werden muss,

führen Sie innerhalb des Docker den folgenden Befehl aus

ssh -R8888:localhost:8888 @172.17.0.1

172.17.0.1 war die IP-Schnittstelle des Dockers (Sie können dies erhalten, indem Sie auf dem Host ausführen ifconfig docker0 | grep "inet addr" | cut -f2 -d":" | cut -f1 -d" ").

hier habe ich den lokalen Port 8888 auf die Ports des Hosts zurückgemappt. Sie können den Port bei Bedarf ändern.

wenn Sie einen weiteren Port benötigen, können Sie das SSH beenden und eine weitere Zeile von -R damit mit dem neuen Port hinzufügen.

Ich habe dies mit Netcat getestet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X