Nie można tego zrobić za pomocą Dockera, ale można uzyskać dostęp do nieosłoniętego portu kontenera z komputera hosta.
jeśli masz kontener, który z czymś działającym na jego porcie 8000, możesz uruchomić
wget http://container_ip:8000
Aby uzyskać adres IP kontenera, uruchom 2 polecenia:
docker ps
docker inspect container_name | grep IPAddress
Wewnętrznie Docker uruchamia się, aby wywołać iptables po uruchomieniu obrazu, więc być może niektóre warianty będą działać.
aby odsłonić port kontenera 8000 na porcie hostów lokalnych 8001:
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
Jednym ze sposobów rozwiązania tego problemu jest skonfigurowanie innego kontenera z żądanym mapowaniem portów i porównanie wyników iptables-save (musiałem jednak usunąć niektóre inne opcje, które zmuszają ruch do przejścia przez doker pełnomocnik).
UWAGA: jest to dokowanie niwelujące, więc należy to zrobić ze świadomością, że może on tworzyć niebieski dym
LUB
Inną alternatywą jest poszukiwanie opcji (nowa? Post 0.6.6?) -P - która wykorzysta losowe porty hosta, a następnie połączy je.
LUB
w wersji 0.6.5 możesz użyć funkcji LINK, aby wywołać nowy kontener, który będzie komunikował się z istniejącym, z dodatkowym przekazywaniem flag -p tego kontenera? (Nie korzystałem jeszcze z LINK-ów)
LUB
z dokerem 0.11? możesz użyć, docker run --net host ..
aby podłączyć kontener bezpośrednio do interfejsów sieciowych hosta (tzn. sieć nie ma odstępów między nazwami), a zatem wszystkie porty otwierane w kontenerze są widoczne.