web-dev-qa-db-ja.com

Docker + Nginx + PHP-FPMエラー:[emerg] 1#1:ホストが上流に見つかりません

私は 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つのファイルが原因です。

最初:この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

2番目このNginx default.confファイルから

これがコードです:

    location ~ \.php$ {
      ...
      fastcgi_pass php-upstream;
      ...
    }

私はこれらの2つのファイルが原因であると言いますb/c php-upstreamの参照が他にありません。

ホストの追加/削除、depends_on、nginx、phpのバージョンを変更し、selinuxを無効にしますが、機能しません。本番環境では常に同じエラーが発生しますが、ローカルサーバーではすべてが機能します。

3
samayo

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; 
3

したがって、そのエラーは、「php-fpm:9000」が何であるかを解決しようとして失敗したように見えます。 この行 は変数を設定しますが、ローカルマシンには、本番環境のものとは異なるものがありますか?

同じdocker-compose.ymlファイルを使用してデプロイしていますか? nginxコンテナを実行する前に、php-fpmコンテナを実行する必要があるようです。

1
Jon Buys

私は同じ問題を抱えています、次のように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
0
Ari Pratomo