2015-11-11 3 views
2

Я запускаю контейнер Docker на своем компьютере. Этот контейнер содержит приложение Java, которое запускает сервер, прослушивающий http://localhost:9000. Когда я запускаю этот код без Docker, тривиально подключаться к серверу, но у меня возникают проблемы с подключением при работе внутри контейнера Docker. Моя docker run команда выглядит следующим образом:Как подключиться к серверу, запущенному в контейнере Docker?

docker run -p 9000 -t -i my-image 

NetworkSettings выход docker inspect выглядит следующим образом:

"NetworkSettings": { 
    "Bridge": "", 
    "SandboxID": "f9c77b7ae7804583fa60211b7d8cfeec5f154b29f9d174a4f0cdb5a8d6e41126", 
    "HairpinMode": false, 
    "LinkLocalIPv6Address": "", 
    "LinkLocalIPv6PrefixLen": 0, 
    "Ports": { 
     "9000/tcp": [ 
      { 
       "HostIp": "0.0.0.0", 
       "HostPort": "32768" 
      } 
     ] 
    }, 
    "SandboxKey": "/var/run/docker/netns/f9c77b7ae780", 
    "SecondaryIPAddresses": null, 
    "SecondaryIPv6Addresses": null, 
    "EndpointID": "10b80d9de186be6ddf9e9d3bb1945124ec1fab7774a135720569e2bf4db3306e", 
    "Gateway": "172.17.0.1", 
    "GlobalIPv6Address": "", 
    "GlobalIPv6PrefixLen": 0, 
    "IPAddress": "172.17.0.2", 
    "IPPrefixLen": 16, 
    "IPv6Gateway": "", 
    "MacAddress": "02:42:ac:11:00:02", 
    "Networks": { 
     "bridge": { 
      "EndpointID": "10b80d9de186be6ddf9e9d3bb1945124ec1fab7774a135720569e2bf4db3306e", 
      "Gateway": "172.17.0.1", 
      "IPAddress": "172.17.0.2", 
      "IPPrefixLen": 16, 
      "IPv6Gateway": "", 
      "GlobalIPv6Address": "", 
      "GlobalIPv6PrefixLen": 0, 
      "MacAddress": "02:42:ac:11:00:02" 
     } 
    } 
} 

Я попытался подключиться к localhost:9000, localhost:32768, 172.17.0.2:9000172.17.0.2:32768 и безрезультатно. Как подключиться к серверу, запущенному в образ Docker?

+1

Вы используете докер непосредственно на Linux? Или вы на Windows или Mac? – VonC

+0

Я использую OS X – Max

ответ

1

Если вы находитесь в OSX, это значит, что вы используете виртуальную виртуальную машину для вашей докере.

Убедитесь, что у вас есть forwarded your port 9000 на ваш настоящий хост (мак), чтобы этот порт был видимым с localhost.
Это действительно для старого загрузочного устройства или нового устройства для докеров.

VBoxManage controlvm "boot2docker-vm" --natpf1 "tcp-port9000 ,tcp,,9000,,9000" 
VBoxManage controlvm "boot2docker-vm" --natpf1 "udp-port9200 ,udp,,9000,,$9000 

(controlvm если виртуальная машина работает, modifyvm является VM остановлен)
(заменить "boot2docker-vm" б имя ythe вашей виртуальной машины: см docker-machine ls)
(используйте -p 9000:9000 зависит от статического порта отображение)

+0

Хм, может быть, я принял слишком рано. Кажется, что сервер не получает никаких запросов. – Max

+0

@Max вы использовали '-p 9000: 9000'? – VonC

+0

Да, я сделал. Я думаю, что проблема связана с переадресацией tcp. Как я могу его отладить? – Max

0

Вы можете попытаться получить доступ к своему контейнеру из среды хоста VirtualBox. Запустите контейнер с -p 9000:9000 вариантами:

docker run -p 9000:9000 -t -i my-image 

Затем запустите Докер-машину, чтобы узнать IP из Докер хоста:

docker-machine ip default 

А затем доступ к приложению Java с выходом команды выше. Например, если это 192.168.99.100:

http://192.168.99.100:9000

+0

Я получаю сообщение об ошибке отказа. – Max

Смежные вопросы