我从本机主机执行
$ curl localhost
或
$ curl
http://usuariointerno:governance@beneficiarios.dev/app_dev.php/actividad
并回应它。
如果从容器名称执行" php"并且:
$ curl localhost --ipv4
无法连接到localhost端口80:拒绝连接
或
$卷曲 http://usuariointerno:governance@beneficiarios.dev/app_dev.php/actividad
卷曲:(7)无法连接到localhost端口80:拒绝连接
当从docker容器faill连接时,如果在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;
}

答案 0 :(得分:5)
Localhost或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
作为主机名。