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大大的;)