2017-02-09 5 views
0

я выполняю от родного хозяина иDocker локон: (7) Не удалось подключиться к локальный порт 80: Соединение отклонено

$ локон локальный

или

$ локон

http://usuariointerno:[email protected]/app_dev.php/actividad

и ответ его нормально.

, если выполнить от имени контейнера "PHP" и:

$ локон локальный --ipv4

Не удалось подключиться к локальный порт 80: Соединение отклонено

или

$ curl http://usuariointerno:[email protected]/app_dev.php/actividad

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

При подключении из Докер контейнера faill, если подключить внешнюю из Докер контейнера его Окей, что его проблема?

Докер-Compose:

version: '2' 
 
services: 
 
    php: 
 
    container_name: php 
 
    build: ./php 
 
    volumes: 
 
     - ./www/:/var/www/html/ 
 
     - ./php/.bashrc:/root/.bashrc 
 
     - ./php/.gitconfig:/root/.gitconfig 
 
    depends_on: 
 
     - postgres 
 
     - mysql 
 

 
    nginx: 
 
    container_name: nginx 
 
    image: nginx 
 
    ports: 
 
     - 80:80 
 
    volumes: 
 
     - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf 
 
     - ./www/:/var/www/html/ 
 
     - ./logs:/var/log/nginx 
 
    depends_on: 
 
     - php 
 
    
 
    postgres: 
 
    container_name: postgres 
 
    image: postgres:9.5.5 
 
    volumes: 
 
     - ./data/postgresql:/var/lib/postgresql/data 
 
     - ./postgres/dumps:/dumps 
 
    environment: 
 
    - POSTGRES_PASSWORD=0000 
 
    - POSTGRES_USER=postgres 
 

 
    mysql: 
 
    container_name: mysql 
 
    image: mysql:5.7.16 
 
    volumes: 
 
     - ./data/mysql:/var/lib/mysql 
 
    environment: 
 
     - MYSQL_ROOT_PASSWORD=0000

nginx.conf

server { 
 
    listen 80; 
 
    server_name beneficiarios.dev; 
 
    root /var/www/html/beneficiarios/web; 
 
    
 
    
 
    add_header Access-Control-Allow-Origin *; 
 

 
    location/{ try_files $uri /app.php$is_args$args;} 
 
    
 
    #dev 
 
    location ~ ^/(app_dev|config)\.php(/|$) { 
 
     add_header Access-Control-Allow-Origin *; 
 
     fastcgi_buffers 16 256k; 
 
     fastcgi_buffer_size 256k; 
 
     fastcgi_pass php:9000; 
 
     fastcgi_split_path_info ^(.+\.php)(/.*)$; 
 
     include fastcgi_params; 
 
     
 
     fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
 
     fastcgi_param DOCUMENT_ROOT $realpath_root; 
 
    } 
 

 
    location ~ ^/app\.php(/|$) { 
 
     fastcgi_buffers 16 256k; 
 
     fastcgi_buffer_size 256k; 
 
     fastcgi_pass php:9000; 
 
     fastcgi_split_path_info ^(.+\.php)(/.*)$; 
 
     include fastcgi_params; 
 
     
 
     fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
 
     fastcgi_param DOCUMENT_ROOT $realpath_root; 
 
     
 
     internal; 
 
    } 
 

 
    location ~ \.php$ { 
 
     return 404; 
 
    } 
 

 
    error_log /var/log/nginx/project_error.log; 
 
    access_log /var/log/nginx/project_access.log; 
 
}

ответ

1

Localhost или 127.0.0.1, всегда означает то же самое хост, поскольку команда в данный момент запущена. Таким образом, на вашем хосте, он будет вызывать ваш хост, но при запуске внутри вашего контейнера он будет звонить в ваш контейнер.

Я собираюсь предположить, что у вас есть DNS-резольвер, который указывает домен .dev на localhost. Контейнер nginx имеет порт 80 с переданного им хоста, поэтому он работает на вашем хосте. Поэтому, когда вы вызываете его со своего хоста, он преуспевает, потому что вызов переходит на порт 80 вашего хоста.

Но когда вы вызываете его внутри контейнера php, он не звонит на ваш хост, он звонит в порт 80 вашего php-контейнера, и у вас нет веб-сервера, работающего внутри вашего php-контейнера. Если вы сделаете этот звонок внутри своего контейнера nginx, это сработает.

Вы должны спросить себя, почему ваш php-контейнер должен будет вызвать ваш контейнер nginx, это звучит странно для меня, поскольку обычно nginx просто перенаправляет «работу» на php. Могли бы вы, например, просто создать php-скрипт, который сделает то, что вы хотите, и вызовите это напрямую?

Если вам действительно нужно позвонить nginx, имейте в виду, что контейнеры из того же файла docker-compose.yml могут звонить друг другу по имени, поэтому вы можете просто использовать nignx в качестве имени хоста.

+0

точный, в контейнере php, нет виртуального хоста. , если я добавляю в контейнер докеры php/etc/hosts 172.18.0.5 (ip of docker nginx) его работы ... как сделать читать php-контейнер виртуальный хост контейнера-nginx? –

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