Ви не можете зробити це через 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 (хоча мені довелося видалити деякі інші параметри, які змушують трафік проходити через докер проксі).
ПРИМІТКА: це підривний докер, тому слід робити з усвідомленням того, що він цілком може створити синій дим
АБО
Ще одна альтернатива - шукати (новий? Пост 0.6.6?) -P варіант - який буде використовувати випадкові порти хоста, а потім з'єднати їх.
АБО
з 0.6.5, ви можете використовувати функцію LINKs, щоб вивести новий контейнер, який спілкується з існуючим, з деякими додатковими ретрансляціями на прапорці -p цього контейнера? (Я ще не використовував посилання)
АБО
з докером 0,11? ви можете використовувати docker run --net host ..
для приєднання свого контейнера безпосередньо до мережевих інтерфейсів хоста (тобто мережа не розміщена по іменах), і таким чином всі порти, які ви відкриєте в контейнері, піддаються впливу.