![](/img/trans.png)
[英]Docker compose error: nginx: [emerg] host not found in upstream “app” in /etc/nginx/conf.d/default.conf:21
[英]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 up
來docker-compose up
;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.