2017-02-01 6 views
2

で私がドッキングウィンドウファイルのthis setと非常に特異な問題を持っている:ドッキングウィンドウ:上流で見つかっていない[EMERG]ホスト「httpstat.us」/etc/nginx/nginx.conf:21

ドッカーの作戦は私が望むことをするのに対し、ドッカーは作ってくれません。

私はドッカーとは全く関係がありませんので、これは多分簡単な質問です。

  • が、私はちょうど

docker run -p 80:8080 -i -t lakrids_devlakrids 172.17.0.1 - - [01/Feb/2017:23:29:36 +0000] "GET/HTTP/1.1" 200 6979 "-" "curl/7.29.0"

私のERRを正確に特定することはできませんが、私はドッキングウィンドウ-コンと同じコンテナを起動した場合、私は

docker-compose up devlakrids Recreating devlakrids Attaching to devlakrids devlakrids | 2017/02/01 23:28:19 [emerg] 11#11: host not found in upstream "httpstat.us" in /etc/nginx/nginx.conf:21 devlakrids | nginx: [emerg] host not found in upstream "httpstat.us" in /etc/nginx/nginx.conf:21 devlakrids exited with code 1

答えて

0

これはは(氏C.イーストウッドに永遠に感謝しています)私の一日作られたものです:)

nginxのコンテナが私のデザインでリバースプロキシを兼ねて - と物事の443セキュリティ側を処理する - 「普通の」アプリケーションサーバーは、ビジネス・ロジックに対処することができます。これにより

# ./docker-compose.yml 
version: '2' 
services: 
    proxy: 
    build: ./shared/proxy 
    networks: 
    - sand 
    links: 
    - devlakrids:devlakrids 
    ports: 
    - 80:80 
    - 443:443 

    # sand[kassen] 
    # 
    devlakrids: 
    build: ./sand/current/spark 
    expose: 
    - "4567" 
    tmpfs: /tmp 
    volumes: 
    - ./sand/current/:/mnt/lakrids 
    - ./shared/sand/:/shared 
    links: 
    - sandmysql 
    networks: 
    - sand 
    - sanddb 

# ./shared/proxy/services.conf 
server { 
     listen 80; 
     listen 443 ssl http2; 
     server_name dev.lakrids.xxxx.xxx; 

     # Path for SSL config/key/certificate 
     ssl on; 
     ssl_certificate /etc/ssl/certs/nginx/xxx.crt; 
     ssl_certificate_key /etc/ssl/certs/nginx/xxxx.pem; 
     include /etc/nginx/includes/ssl.conf; 
     add_header Strict-Transport-Security "max-age=31536000"; 

     location/{ 
       include /etc/nginx/includes/proxy.conf; 
       proxy_pass http://devlakrids:4567; 
     } 

     access_log off; 
     error_log /var/log/nginx/error.log error; 
} 

# ./shared/proxy/includes/proxy.conf 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
proxy_set_header X-Forwarded-Proto $scheme; 
proxy_buffering off; 
proxy_request_buffering off; 
proxy_http_version 1.1; 
proxy_intercept_errors on; 

- すべてのことを行うようにして残されましたdocker-compose up全体的);

1

二つの可能な犯人を取得します:

  • nginxはおかしい獣です。nginxが既に実行されている間にアップストリームがダウンした場合、nginxは稼働し続けます。しかし、nginx startで上流に到達できない場合、後者は開始に失敗します。これを解決するには、nginxスタートアップスクリプトを追加して、上流のコンテナテストを開始してからnginxを開始する必要があります。

  • は、明示的にlinksを追加しよう:何とか我々はnginxドッキングウィンドウは、暗黙のうちにcomposeサービス名を使って定義された他のマシンを見ていないことは、この問題を持っていました。

最後に、1つの本当に忘れられたオプションがある:あなたはhttpstat.usサービスがドッカエンジン内に開始された場所を表示し、ファイル内の任意の場所に指定していないので、それはコンなしであなたのために働くことを、実際には驚くべきことです。

1

説明から、作成中に実行しているイメージは、作成中に実行したイメージと異なる可能性があります。または、異なるボリュームマウントがあります。あなたのエラーを解決するには、私は上流の定義を使用してnginx.confを更新したい:

daemon off; 
worker_processes 1; 
events { worker_connections 1024; } 
http { 
    upstream httpstat.us { 
     least_conn; 
     server httpstat.us:80 fail_timeout=60s max_fails=2; 
    } 

    sendfile on; 
    server { 
     listen 8080; 
     server_name dev.lakrids.premier-is.dk; 

     location/{ 
     proxy_pass http://httpstat.us/; 
     proxy_set_header X-Real-IP $remote_addr; 
     } 
    } 
} 
関連する問題