簡體   English   中英

docker vs docker-compose nginx:[emerg] host在/etc/nginx/nginx.conf:21的上游“httpstat.us”中找不到

[英]docker vs docker-compose nginx: [emerg] host not found in upstream “httpstat.us” in /etc/nginx/nginx.conf:21

這套 docker文件有一個非常奇怪的問題:

docker run會做我想要的,而docker-compose則不會

我對Docker很無禮,因此這可能是一個相當簡單的問題 - 我提前道歉!

  • 但我無法確定我的錯誤

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"

但如果我用docker-compose啟動相同的容器,我會得到

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

兩個可能的罪魁禍首:

  • nginx是一個有趣的野獸:如果上游在nginx已經運行時發生故障,那么nginx會繼續運行。 但是,如果在nginx啟動時無法訪問上游,則后者將無法啟動。 要解決這個問題,你可能需要在啟動nginx之前向你的nginx容器測試中添加一個啟動腳本,以便上游啟動;

  • 嘗試顯式添加links :不知怎的,我們遇到了這個問題,即nginx docker沒有看到通過compose服務名隱式定義的其他機器。

最后,一個真正被遺忘的選項是:您沒有在您顯示的文件中指定在httpstat.us引擎中啟動httpstat.us服務的任何位置,因此實際上令人驚訝的是它在沒有撰寫的情況下適合您。

根據描述,您在合成之外運行的圖像可能與您在合成中運行的圖像不同,或者您具有不同的卷安裝。 要解決您的錯誤,我將使用上游定義更新您的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;
      }
   }
}

這就是我的一天 (我永遠感謝C. Eastwood先生):)

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 updocker-compose up ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM