2015-03-19 13 views
1

У меня есть 2 контейнера:Docker контейнер не может достичь другой контейнер, используя имя хоста

docker run -d -p 9000:9000 --name="my-php" php-fpm:5.4 

docker run -d --name="nginx" -p 80:80 -link my-php:web nginx 

как работают очень хорошо. Внутри контейнера nginx я могу добраться до приложения, используя

curl http://myapp.dev 

а также от главной машины, а также.

То, что я пытаюсь сделать, это тот же самый запрос локон, но из контейнера мой, PHP, используя тот же «myapp.dev» имя хоста, Howerver ...

локон: (7) Не удалось подключиться к порту myapp.dev 80: Соединение отклонено

Я могу использовать ip контейнера вместо этого, но мне это не подходит.

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

на Nginx контейнере:

[email protected]:/# env 
WEB_PORT_9000_TCP_PROTO=tcp 
HOSTNAME=6252bfe9d545 
WEB_PORT_9000_TCP_ADDR=172.17.0.24 
WEB_PORT_9000_TCP_PORT=9000 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
PWD=/ 
NGINX_VERSION=1.7.9-1~wheezy 
SHLVL=1 
HOME=/root 
WEB_NAME=/nginx/web 
WEB_PORT_9000_TCP=tcp://172.17.0.24:9000 
WEB_PORT=tcp://172.17.0.24:9000 
_=/usr/bin/env 

[email protected]:/# route -n 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
0.0.0.0   172.17.42.1  0.0.0.0   UG 0  0  0 eth0 
172.17.0.0  0.0.0.0   255.255.0.0  U  0  0  0 eth0 

на PHP контейнер

[email protected]:/# env 
MYSQLDB_PORT_3306_TCP=tcp://172.17.0.22:3306 
HOSTNAME=c7c521c4a40c 
MYSQLDB_NAME=/php/mysqldb 
MEMCACHEDB_ENV_MEMCACHED_VERSION=1.4.22 
MYSQLDB_PORT=tcp://172.17.0.22:3306 
MEMCACHEDB_PORT=tcp://172.17.0.23:11211 
MEMCACHEDB_NAME=/php/memcachedb 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
MYSQLDB_PORT_3306_TCP_PROTO=tcp 
MEMCACHEDB_ENV_MEMCACHED_SHA1=5968d357d504a1f52622f9f8a3e85c29558acaa5 
PWD=/ 
MEMCACHEDB_PORT_11211_TCP=tcp://172.17.0.23:11211 
MEMCACHEDB_PORT_11211_TCP_PORT=11211 
SHLVL=1 
HOME=/root 
MYSQLDB_PORT_3306_TCP_ADDR=172.17.0.22 
MEMCACHEDB_PORT_11211_TCP_PROTO=tcp 
MYSQLDB_PORT_3306_TCP_PORT=3306 
MEMCACHEDB_PORT_11211_TCP_ADDR=172.17.0.23 
_=/usr/bin/env 

(here it's showing links to mysql and memchache which I hide on run command before paste on stackoverflow) 

ping myapp.dev 
PING myapp.dev (127.0.53.53) 56(84) bytes of data. 
64 bytes from 127.0.53.53: icmp_seq=1 ttl=64 time=0.025 ms 

[email protected]:/# route -n 
Kernel IP routing table 
Destination  Gateway   Genmask   Flags Metric Ref Use Iface 
0.0.0.0   172.17.42.1  0.0.0.0   UG 0  0  0 eth0 
172.17.0.0  0.0.0.0   255.255.0.0  U  0  0  0 eth0 

myapp.conf на Nginx

server { 
     listen   80; 
     server_name  myapp.dev; 
     root   /projects/MyApp/public; 
     index   index.html index.htm index.php; 

     fastcgi_connect_timeout 5000s; 
     fastcgi_read_timeout 5000s; 
     fastcgi_send_timeout 5000s; 

     access_log /var/log/nginx-access.log; 
     error_log /var/log/nginx-error.log; 
     location/{ 
       try_files $uri $uri/ /index.php$is_args$args; 
     } 

     location ~ \.php$ { 
       fastcgi_pass web:9000; 
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
       include   fastcgi_params; 
      fastcgi_param APPLICATION_ENV dev; 
     } 
} 

Кто-нибудь есть какие-либо подсказки?

+0

могли бы вы предоставить конфигурацию Nginx? –

+0

зайдите в оба контейнера с помощью 'docker exec -it' и отлаживайте с помощью обычного netstat, ping, route, lsof -i: 80 (возможно, вам придется установить некоторые из них), проверьте также« журналы докеров »для ваших контейнеров и посмотрите на 'docker events' – user2915097

+0

Там nginx.conf и route -n output – globo

ответ

0

добавить IP в файл/и т.д./файл хостов в вашей мой-PHP контейнер:

(IP вашего Nginx контейнера) myapp.dev

Если получить результат вам нужно.

пример:

111.111.111.111 foo.bar.com

+0

Хорошо, это сработало, но у меня есть некоторые проблемы с этим решением, потому что я не могу запускать свое приложение автоматически, я всегда буду иметь для обновления/etc/hosts с ip-адресом контейнера nginx. Даже если вы можете редактировать хосты на Docker, используя некоторые трюки, я думаю, что это неправильное решение – globo

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