2017-02-09 92 views
0

我從本地主機執行和多克爾捲曲:(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連接,如果連接搬運工容器之外的OK,它有什麼問題?

搬運工-撰寫:

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

本地主機,或127.0.0.1,始終表示相同的主機作爲當前正在運行的命令。所以在你的主機上,它會調用你的主機,但是當它運行在你的容器內時,它會調用你的容器。

我打算假設您有一個DNS解析器,它將.dev域指向localhost。 nginx容器將主機的端口80轉發給它,這就好像它在主機上運行一樣。所以當你從你的主機調用它時,它會成功,因爲呼叫將進入主機的80端口。

但是,當你在php容器中調用它時,它不會調用你的主機,它調用你的php容器的80端口,並且你的php容器中沒有運行web服務器。如果你在你的nginx容器內進行了這個調用,它會起作用。

你應該問自己爲什麼你的PHP容器需要打電話給你的nginx容器,這聽起來很奇怪,因爲通常nginx只會將「工作」轉發給php。例如,你可以創建一個你想要的並直接調用它的php腳本嗎?

如果您確實需要調用nginx,請記住,來自同一個docker-compose.yml文件的容器可以通過名稱互相調用,因此您可以使用nignx作爲主機名。

+0

確切的說,在PHP容器中,沒有虛擬主機。 如果我在docker container php/etc/hosts 172.18.0.5(docker nginx的ip)中加入它的作品... 如何讀php-container虛擬主機的container-nginx? –

相關問題