2017-02-01 5 views
2

in upstream "httpstat.us" finde ich habe ein sehr eigentümliches Problem mit this set von Docker Dateien:Docker vs Docker-compose nginx: [emerg] host nicht in /etc/nginx/nginx.conf:21

docker-run wird tun, was ich will, während docker-komponieren wird nicht

Ich bin ziemlich noob'ed mit Docker daher diese wahrscheinlich ziemlich einfache Frage - und ich entschuldige mich im Voraus!

  • aber ich kann einfach nicht mein err lokalisieren

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"

aber wenn ich den gleichen Behälter mit Docker-compose starten ich

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

Antwort

0

Dies ist, was machte meinen Tag (bin für immer dankbar, Herr C. Eastwood) :)

Die nginx Behälter dienen gleichzeitig als Reverse-Proxy in meinem Design - und übernehmen das 443 Sicherheits Ende der Dinge - so dass ‚normaler‘ Anwendungsserver mit der Business-Logik beschäftigen:

# ./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; 

damit - das alles gelassen wurde, zu tun docker-compose up im Großen und Ganzen;)

1

Zwei mögliche Täter:

  • nginx ist ein lustiges Biest: wenn der Upstream unter nginx bereits läuft, dann läuft nginx weiter. Wenn Upstream jedoch unter nginx start nicht erreichbar ist, wird letzterer nicht gestartet. Um dies zu beheben, müssen Sie möglicherweise ein Startskript zu Ihrem nginx Container-Test hinzufügen, damit Upstreams vor dem Start aktiv sind nginx;

  • try links explizit hinzufügen: irgendwie haben wir dieses Problem hatte, dass die nginx Docker keine anderen Maschinen über compose Servicenamen definiert implizit gesehen haben.

schließlich ein wirklich vergessen Option ist: Sie müssen nicht überall in den Dateien an, die Sie zeigen, wo der httpstat.us Dienst innerhalb der Docker Motor gestartet wird, so ist es eigentlich verwunderlich, dass es für Sie ohne compose funktioniert.

1

Laut der Beschreibung unterscheidet sich das Bild, das Sie außerhalb von Compose ausführen, wahrscheinlich von dem Bild, das Sie innerhalb von Compose ausführen, oder Sie haben andere Volume-Mounts. Um Ihre Fehler zu beheben, würde ich Ihre nginx.conf mit einer vorgeschalteten Definition aktualisieren:

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; 
     } 
    } 
} 
Verwandte Themen