[解決済み] Docker Networking - nginx: [emerg] ホストがアップストリームで見つかりません
質問
最近、Docker 1.9とDocker-Compose 1.5のネットワーク機能に移行し、リンクを使用することを置き換え始めました。
これまでリンクでは、nginx が 1 つのグループ内の別のサーバーにある私の php5-fpm fastcgi サーバーに docker-compose を介して接続することに問題はなかったのです。しかし、最近
docker-compose --x-networking up
を実行すると php-fpm、mongo、nginx の各コンテナが起動しますが、nginx はすぐに
[emerg] 1#1: host not found in upstream "waapi_php_1" in /etc/nginx/conf.d/default.conf:16
しかし、phpとmongoのコンテナが動いている(nginxが終了している)状態で再度docker-composeコマンドを実行すると、nginxが起動し、それ以降は問題なく動作しています。
これは私の
docker-compose.yml
ファイルです。
nginx:
image: nginx
ports:
- "42080:80"
volumes:
- ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
php:
build: config/docker/php
ports:
- "42022:22"
volumes:
- .:/var/www/html
env_file: config/docker/php/.env.development
mongo:
image: mongo
ports:
- "42017:27017"
volumes:
- /var/mongodata/wa-api:/data/db
command: --smallfiles
これは私の
default.conf
をnginx用にしたものです。
server {
listen 80;
root /var/www/test;
error_log /dev/stdout debug;
access_log /dev/stdout;
location / {
# try to serve file directly, fallback to app.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/.+\.php(/|$) {
# Referencing the php service host (Docker)
fastcgi_pass waapi_php_1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
# We must reference the document_root of the external server ourselves here.
fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}
docker-composeを1回呼び出すだけでnginxを動作させるにはどうしたらよいでしょうか?
どのように解決するのですか?
後述するdepends_on機能が導入されるまでの間、回避策として"volumes_from"を使用する可能性があります。docker-composeのファイルを以下のように変更するだけです。
nginx:
image: nginx
ports:
- "42080:80"
volumes:
- ./config/docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
volumes_from:
- php
php:
build: config/docker/php
ports:
- "42022:22"
volumes:
- .:/var/www/html
env_file: config/docker/php/.env.development
mongo:
image: mongo
ports:
- "42017:27017"
volumes:
- /var/mongodata/wa-api:/data/db
command: --smallfiles
上記の方法の大きな注意点は、phpのボリュームがnginxに公開されることで、これは望ましいことではありません。しかし、現時点では、これは使用可能な 1 つの docker 固有の回避策です。
depend_on機能 これはおそらく未来的な回答でしょう。なぜなら、この機能はまだDockerに実装されていないからです(1.9現在)。
Dockerで導入された新しいネットワーク機能で、"depends_on"を導入する案があるそうです。しかし、同@については長い間議論が続いています。 https://github.com/docker/compose/issues/374 したがって、それが実装されれば、コンテナの起動を順序付けるためにdepends_on機能を使用することができますが、現時点では、次のいずれかに頼る必要があります。
- php サーバーが立ち上がるまで nginx をリトライさせる - 私はこの方法を好みます。
- 上記のように volums_from を使用する - 不要なコンテナにボリュームが漏れるので、私はこれを使用しないようにします。
関連
-
[解決済み] どのヘッダテストツールでもnginxが400 bad request headersを投げるのを修正する方法は?
-
ブラウザエラー net::ERR_CONTENT_LENGTH_MISMATCH 200 (OK) 解決策
-
[解決済み] Dockerコンテナの中から、マシンのローカルホストに接続するにはどうすればよいですか?
-
[解決済み] Docker Dockerコンテナからホストへのファイルコピー
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み] ホストからDockerコンテナのIPアドレスを取得する方法
-
[解決済み] Dockerイメージはホストマシン上のどこに保存されていますか?
-
[解決済み】Nginxのロケーション優先順位
-
[解決済み] nginx client_max_body_size のデフォルト値です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] nginxのエラー "conflicting server name "を無視する [終了しました]。
-
Gitはいくつかのバグフィックスを行いました。マージされていないファイルがあるため、Pullができない。
-
nginx スタートアップ・エラー。nginx.serviceのジョブは、制御プロセスがエラーコードで終了したため失敗しました。
-
linux システムでの Nginx のインストール: make: *** `install' をターゲットとするルールがありません。停止します。
-
nginx 起動プロンプト nginx: [emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
[解決済み] サーバーがGZip形式のコンテンツを配信しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] nginx が空白の PHP ページを表示する
-
[解決済み] nginxです。[emerg] "server" ディレクティブはここでは許可されません。
-
[解決済み] nginx server_name ワイルドカードまたはキャッチオール
-
[解決済み] Nginx 同一IPで異なるドメイン