我有一个从中克隆的 LEMP 堆栈的 docker 设置这个仓库。
在运行 Windows 10 的开发机器上一切都运行良好,但是当我将图像推送到 docker hub 并将其拉到我的 VPS 上时,无论我做什么,我总是收到此错误:
[emerg] 1#1: host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1
该错误来自两个文件。
第一的: 来自此 Nginx Docker 文件
以下是代码:
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
&& rm /etc/nginx/conf.d/default.conf
以下是代码:
location ~ \.php$ {
...
fastcgi_pass php-upstream;
...
}
我说这两个文件是原因,因为其他地方没有对 php-upstream 的引用。
我尝试了添加/删除主机、添加depends_on
、更改 nginx、php 版本、禁用 selinux 等所有可能的组合,但就是不起作用。我在生产中总是遇到相同的错误,但在本地服务器上一切正常。
答案1
nginx 无法解析主机名php-fpm
,因此拒绝启动。
有一个简单的解决方法 - 在这种情况下 - 直到502 - Bad Gateway
nginx 能够解析上游的主机名:将上游地址放入变量中!
此外,你应该使用选项手动将 nginx 指向 docker 的内部 DNS。dockerresolver
内部 DNS 服务器始终127.0.0.11
位于文档。
resolver 127.0.0.11;
set $upstream php-fpm:9000;
# nginx will now start if host is not reachable
fastcgi_pass $upstream;
答案2
我有同样的问题,我可以通过添加到 php-fpm 的链接来解决,如下所示:
services:
php-fpm:
build:
context: ./php-fpm
volumes:
- ../www:/var/www/html
depends_on:
- database
links:
- database:db
nginx:
build:
context: ./nginx
volumes:
- ../www:/var/www/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/sites/:/etc/nginx/sites-available
- ./nginx/conf.d/:/etc/nginx/conf.d
- ./nginx/log/:/var/log/nginx
ports:
- "8080:80"
- "443:443"
depends_on:
- php-fpm
links:
- php-fpm