2015-09-04 6 views
1

Так вот ситуация, у меня есть контейнер работает встроенный с этим dockerfile:Докер-контейнер опубликованных портов недоступен?

FROM python:2-onbuild 
EXPOSE 8888 
CMD [ "nohup", "mock-server", "--dir=/usr/src/app", "&" ] 

я запустить его с помощью этой команды:

docker build -t mock_server . 
docker run -d -p 8888:8888 --name mocky mock_server 

Я использую его на макинтош так boot2docker собирается и я ударил его с boot2docker ip на 8888. Я попробовал boot2docker ssh и ударил контейнер оттуда. Я побежал docker exec -it mocky bash и ps aux шоу:

USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 0.0 0.9 113316 18576 ?  Ss 15:16 0:00 /usr/local/bin/python2 /usr/local/bin/mock-server --dir=/usr/src/app & 
root   5 1.6 0.1 21916 3440 ?  Ss 17:52 0:00 bash 
root   9 0.0 0.1 19180 2404 ?  R+ 17:53 0:00 ps aux 

Когда я завить его:

curl -I -XGET localhost:8888/__manage 
HTTP/1.1 200 OK 
Content-Length: 183108 
Set-Cookie: flash_msg_success=; expires=Thu, 04 Sep 2014 17:54:58 GMT; Path=/ 
Set-Cookie: flash_msg_error=; expires=Thu, 04 Sep 2014 17:54:58 GMT; Path=/ 
Server: TornadoServer/4.2.1 
Etag: "efdb5b362491b8e4b8347b97ccafeca02db8d27d" 
Date: Fri, 04 Sep 2015 17:54:58 GMT 
Content-Type: text/html; charset=UTF-8 

Так что приложение работает внутри контейнера, но я не могу получить что-нибудь от него снаружи. Что можно сделать здесь?

+0

Кроме того, нет необходимости в 'nohup' в вашей линии CMD Dockerfile. –

+0

@PeterLyons, если я не делаю что-то вроде «nohup», серверный mock-сервер сервера, похоже, не запускается. – Hasen

+0

А может, он выходит, если stdin - это не tty или что-то, чего, вероятно, не следует делать. Но просто FYI для большинства правильных сетевых серверов «nohup» не требуется и не должен использоваться в линии докеры «CMD». –

ответ

5

Предполагается, что программа python явно связывает с IP-адресом loopback 127.0.0.1, который запрещает любые удаленные подключения. Проверьте документы для этого python mock сервера торнадо для чего-то вроде --bind=0.0.0.0 и настройте соответствующим образом.

Вы можете подтвердить это, выполнив команду docker и в контейнере, запущенном netstat -ntlp | grep 8888, и посмотрев, какой IP-адрес связан. Если это 127.0.0.1, это подтверждает, что это действительно проблема.

+0

Спасибо, я просто понял это и пришел посмотреть, что вы дали аналогичный ответ. Я не понимал, что вы не можете служить в контейнере на локальном или кольцевом адресе. В частности, для этой проблемы я сменил Dockerfile CMD на: 'CMD [" nohup "," mock-server "," --dir =/usr/src/app "," --address = 0.0.0.0 "," & " ] ' – Hasen