2017-02-09 93 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? –

相关问题