docker-docker-compose nginx:主机在/etc/nginx/nginx.conf中的上游“httpstat.us”找不到:21
我有这个 docker文件的一个非常奇怪的问题:
docker运行将做我想要的,而docker组成不会
我很喜欢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
容器testing上游,在启动nginx
之前, -
尝试显式添加
links
:不知何故,我们有这个问题,nginx
泊坞窗没有看到其他机器隐式定义通过compose
服务名称。
最后,一个真正被遗忘的select是:你不指定在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.伊斯特伍德先生):)
在我的devise中,nginx容器兼作反向代理,并处理事物的安全性 – 允许“普通”应用程序服务器处理业务逻辑:
# ./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
大大的;)