私は this repo からクローンしたLEMPスタック用のDockerセットアップを持っています。
Window 10を実行している開発マシンではすべてがうまく機能しますが、イメージをDockerハブにプッシュしてVPSでプルすると、何をしようとも常にこのエラーが発生します。
[emerg] 1#1: Host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1
このエラーは2つのファイルが原因です。
これがコードです:
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;
...
}
私はこれらの2つのファイルが原因であると言いますb/c php-upstreamの参照が他にありません。
ホストの追加/削除、depends_on
、nginx、phpのバージョンを変更し、selinuxを無効にしますが、機能しません。本番環境では常に同じエラーが発生しますが、ローカルサーバーではすべてが機能します。
nginxはホスト名php-fpm
の解決に失敗するため、開始を拒否します。
Nginxがアップストリームのホスト名を解決できるようになるまで、この場合は502 - Bad Gateway
になる単純な回避策があります。アップストリームアドレスを変数に入れます!
さらに、resolver
オプションを使用して手動でnginxをdockerの内部DNSにポイントする必要があります。 ドキュメント にあるように、Docker内部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;
したがって、そのエラーは、「php-fpm:9000」が何であるかを解決しようとして失敗したように見えます。 この行 は変数を設定しますが、ローカルマシンには、本番環境のものとは異なるものがありますか?
同じdocker-compose.ymlファイルを使用してデプロイしていますか? nginxコンテナを実行する前に、php-fpmコンテナを実行する必要があるようです。
私は同じ問題を抱えています、次のように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