2016-02-25 3 views
0

Основываясь на 'Python: 2.7' изображения, я создал два контейнера: container1, container2Докер: открытые порты не могут быть доступны в другом контейнере

Dockerfile для test1:

FROM python:2.7 
EXPOSE 6789 
CMD  ["bash", "-c", "'while true;do sleep 1000;done;'"] 

Dockerfile для test2:

FROM python:2.7 
EXPOSE 9876 
CMD  ["bash", "-c", "'while true;do sleep 1000;done;'"] 

Тогда я построил два новых изображения с вышеупомянутым dockerfiles, по имени: test1, test2

container1:

docker run --name container1 test1 

И я также настроить сервер Django на порту 6789 в container1 с:

#In Django workspace 
./manage.py runserver 6789 

container2:

docker run --name container2 --link container1:container1 test2 

И я также настроить сервер Django на порту 9876 в контейнере2 с:

#In Django workspace 
./manage.py runserver 9876 

В container2, когда я бег

curl container1_ip:6789 

Я получил соединение отказалось ошибки.

Как его настроить, чтобы он работал?

Я также создал контейнер с официальным Nginx изображение, оно имеет два порта по умолчанию (80, 443), подвергшегося, а затем создал другой контейнер связан с Nginx контейнер, в контейнере, я сделал то же самое

curl nginx_ip:80 #successful 

и

curl nginx_ip:443 #connection refused 

Почему это происходит? Почему 80 работает хорошо, а 443 не работает?

+1

Не похоже, что у вас есть что-нибудь * прослушивание * на этих портах? – larsks

+0

По крайней мере, работает 'ping container1_ip from container2'? – VonC

+0

Возможно, вы обнаружили порт, но не привязываете к ним какой-либо процесс. Поскольку процесс соединения _accept_ отсутствует, вы получаете сообщение об ошибке «connection reject». – Auzias

ответ

0

Проблема не в том, как настроить докер, это проблема с конфигурацией Django. Django прослушивает localhost: порт по умолчанию, мы должны указать IP-адрес для прослушивания или с «0.0.0.0», чтобы он прослушивал весь IP-адрес.

1

Что вы пытаетесь сделать с помощью порта «curling» 6789/9876 вашего контейнера? есть ли что-нибудь (ftp-сервер или что-то еще?) за этими портами?

Прежде чем пытаться добраться до него из другого контейнера, вы должны попытаться достичь его из самого контейнера

В container1:

локон container1_ip: 6789

Я думаю, вы можете получить доступ к этим портам, но на вашем контейнере ничего не слышно.

РЕДАКТИРОВАТЬ: Если вы меня опустили, просьба прокомментировать, почему, поэтому я могу улучшить свои ответы, спасибо.

+0

Извините за недостающую информацию, я уже добавляю их. Фактически, я устанавливаю сервер Django на оба порта (6789, 9876), и я попробовал то, что вы предложили: запустите 'curl container1_ip: 6789' в контейнере1, он сработал и вернул некоторый html. Но это никогда не поможет оригинальной проблеме. – Alex