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

我从本地主机执行

$ curl localhost

要么

$ curl

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

并回应其确定。

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

$ curl localhost –ipv4

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

要么

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

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

当从docker container连接时,如果连接docker container的外面可以,那么它的问题是什么?

泊坞窗 – 撰写:

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始终表示与当前运行的命令相同的主机。 所以在你的主机上,它会调用你的主机,但是在你的容器内运行时,它会调用你的容器。

我将假设您有一个将.dev域指向localhost的DNSparsing器。 nginx容器将主机的端口80转发给它,就好像它正在主机上运行一样。 所以,当你从你的主机调用它,它成功,因为呼叫到您的主机的端口80。

但是当你在PHP容器中调用它的时候,它不会调用你的主机,它调用你的PHP容器的80端口,并且你的php容器中没有运行web服务器。 如果你在你的nginx容器里面调用了这个函数,

你应该问自己为什么你的PHP容器需要调用你的nginx容器,这听起来很奇怪,因为通常nginx只是将“工作”转发到PHP。 例如,你可以创build一个你想要的并直接调用它的php脚本吗?

如果你真的需要调用nginx,请记住,来自同一个docker-compose.yml文件的容器可以通过名字来调用对方,所以你可以使用nignx作为主机名。