Sie können dies nicht über Docker tun, aber Sie können auf den nicht freigegebenen Port des Containers vom Hostrechner aus zugreifen.
Wenn Sie einen Container mit etwas laufendem auf seinem Port 8000 haben, können Sie Folgendes ausführen:
wget http://container_ip:8000
Um die IP-Adresse des Containers zu erhalten, führen Sie die 2 Befehle aus:
docker ps
docker inspect container_name | grep IPAddress
Intern ruft Docker beim Ausführen eines Images iptables auf, daher könnte irgendeine Variation davon funktionieren.
Um den Port 8000 des Containers auf Port 8001 Ihres localhost freizugeben:
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
Eine Möglichkeit, dies herauszufinden, besteht darin, einen anderen Container mit der Portzuordnung, die Sie möchten, einzurichten und die Ausgabe des iptables-save-Befehls zu vergleichen (obwohl ich einige der anderen Optionen entfernen musste, die den Datenverkehr über den Docker-Proxy zwingen).
HINWEIS: Dies unterläuft Docker, sollte also mit dem Bewusstsein durchgeführt werden, dass es wahrscheinlich blaue Rauch erzeugen wird.
ODER
Eine andere Alternative besteht darin, die (neue? nach 0.6.6?) -P-Option zu prüfen, die zufällige Host-Ports verwendet und diese dann verknüpft.
ODER
Mit 0.6.5 könnten Sie die LINKs-Funktion verwenden, um einen neuen Container hochzufahren, der mit dem vorhandenen spricht, wobei zusätzliche Relais zu den -p-Flags dieses Containers? (Ich habe LINKs noch nicht verwendet.)
ODER
Mit Docker 0.11? können Sie docker run --net host ..
verwenden, um Ihren Container direkt an die Netzwerkinterfaces des Hosts anzuschließen (d. h. das Netzwerk ist nicht im Namespace), und somit werden alle Ports, die Sie im Container öffnen, freigegeben.