Вы не можете сделать это через Docker, но вы можете получить доступ к незакрытому порту контейнера с хост-машины.
если у вас есть контейнер, который работает с портом 8000, вы можете запустить
wget http://container_ip:8000
Чтобы получить IP-адрес контейнера, выполните 2 команды:
docker ps
docker inspect container_name | grep IPAddress
Внутренне Docker выдает вызов iptables при запуске образа, так что, возможно, сработают некоторые варианты.
выставить порт контейнера 8000 на ваш локальный порт 8001:
iptables -t nat -A DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
Один из способов решить эту проблему - настроить другой контейнер с желаемым отображением портов и сравнить выходные данные команды iptables-save (хотя мне пришлось удалить некоторые другие параметры, которые заставляют трафик проходить через докер прокси).
ПРИМЕЧАНИЕ: это подрывной докер, поэтому следует делать с осознанием того, что он может хорошо создавать синий дым
ИЛИ
Другой альтернативой является поиск опции (new? Post 0.6.6?) -P, которая будет использовать произвольные порты хоста, а затем подключать их.
ИЛИ
с 0.6.5, вы могли бы использовать функцию LINKs, чтобы вызвать новый контейнер, который общается с существующим, с некоторыми дополнительными ответами на флаги -p этого контейнера? (Я еще не использовал ССЫЛКИ)
ИЛИ
с докером 0,11? Вы можете использовать его docker run --net host ..
для непосредственного присоединения вашего контейнера к сетевым интерфейсам хоста (т. е. net не является пространством имен) и, таким образом, все порты, которые вы открываете в контейнере, открыты.