Docker curl:(7)无法连接到本地主机端口80:连接被拒绝

Edu*_*rra 1 docker docker-compose

我从本地主机执行

$ curl本地主机

要么

卷曲

http:// usuariointerno:governance@beneficiarios.dev/app_dev.php/actividad

并确定。

如果从容器名称“ php”执行并:

$ curl本地主机--ipv4

无法连接到本地主机端口80:连接被拒绝

要么

$ curl http:// usuariointerno:governance@beneficiarios.dev/app_dev.php/actividad

curl:(7)无法连接到本地主机端口80:连接被拒绝

从Docker容器故障连接时,如果在Docker容器外部连接则可以,这是什么问题?

码头工人组成:

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
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

pee*_*dee 8

Localhost(即127.0.0.1)始终表示与命令当前正在运行的主机相同。因此,在您的主机上,它将调用您的主机,但是在容器内运行时,它将调用您的容器。

我将假定您有一个将.dev域指向的DNS解析器localhost。nginx容器将主机的端口80转发给它,因此就好像它在主机上运行一样。因此,当您从主机调用它时,它会成功,因为调用转到了主机的端口80。

但是,当您在php容器内调用它时,它不是在调用主机,而是在php容器的端口80上调用,并且您的php容器内没有运行的网络服务器。如果您在nginx容器中进行了此调用,则它将起作用。

您应该问自己,为什么您的php容器需要调用您的nginx容器,这对我来说听起来很奇怪,因为通常nginx只会将“工作”转发给php。例如,您能否只创建一个您想要的PHP脚本并直接调用它?

如果确实需要调用nginx,请记住,同一docker-compose.yml文件中的容器可以按名称相互调用,因此您可以将其nignx用作主机名。