[英]Docker Nginx PHP Laravel curl failed to connect to api.localhost port 80. Connection refused
[英]Docker curl: (7) Failed to connect to localhost port 80: Connection refused
我从本地主机执行
$ 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
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; }
Localhost(即127.0.0.1)始终表示与命令当前正在运行的主机相同。 因此,在您的主机上,它将调用您的主机,但是在容器中运行时,它将调用您的容器。
我将假设您有一个DNS解析器,该解析器将.dev
域指向localhost
。 nginx容器将主机的端口80转发给它,因此就好像它在主机上运行一样。 因此,当您从主机调用它时,它会成功,因为调用转到了主机的端口80。
但是,当您在php容器内调用它时,它不是在调用主机,而是在php容器的端口80上调用,并且您的php容器内没有运行的网络服务器。 如果您在nginx容器中进行了此调用,则它将起作用。
您应该问自己,为什么您的php容器需要调用您的nginx容器,这对我来说听起来很奇怪,因为通常nginx只会将“工作”转发给php。 例如,您能否只创建一个您想要的PHP脚本并直接调用它?
如果您确实需要调用nginx,请记住,来自同一docker-compose.yml
文件的容器可以按名称相互调用,因此您可以仅使用nignx
作为主机名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.