2017-09-28 3 views
0

J'ai un proxy inverse nginx vers un serveur golang, chacun dans son propre conteneur docker et fonctionnant normalement. Je continue d'obtenir cette erreur dans nginx lorsque j'essaie de me connecter au conteneur Go, sur mon ordinateur Mac local et sur le serveur de production Linux Debian. Il travaillait sur ma machine Mac locale il y a une semaine et tout d'un coup, il ne plusProblème Docker avec le proxy inverse nginx vers le serveur golang

nginx_1 | 2017/09/28 01:29:54 [error] 5#5: *12 upstream timed out (110: Connection timed out) while connecting to upstream, client: 172.23.0.1, server: , request: "GET /api/about HTTP/1.1", upstream: "http://67.199.248.12:8080/api/about", host: "localhost" 

quelqu'un peut expliquer ce qui se passe ici? Qu'est-ce que 67.199.248.12 et pourquoi Nginx ne peut-il pas pinguer/se connecter au conteneur Go?

Voici ce qui existe dans/etc/hosts dans Go contenant

127.0.0.1 localhost 
::1 localhost ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 
172.23.0.5 31f4103f002c 

Voici mon nginx.conf

upstream gogo { 
    server go:8080 weight=10 max_fails=3 fail_timeout=30s; 
} 

server { 
    listen 80; 

    location /api/ { 
    resolver   127.0.0.1 valid=30s; 
    proxy_pass   http://gogo; 
    proxy_redirect  off; 
    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-Host $server_name; 
    } 
} 

J'utilise docker-Compose v3 pour exécuter nginx et docker

nginx: 
    restart: always 
    image: nginx 
    volumes: 
     - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf 
    ports: 
     - "80:80" 
    command: /bin/bash -c "nginx -g 'daemon off;'" 

    go: 
    build: 
     context: ./api 
    expose: 
     - "8080" 
    depends_on: 
     - nginx 

go code:

func main() { 
    router := mux.NewRouter().StrictSlash(true) 
    router.HandleFunc("/api/about", About).Methods("GET") 
    log.Fatal(http.ListenAndServe(":8080", router)) 
} 
+1

Comment utilisez-vous chaque conteneur? – BMitch

+0

Il semble que le conteneur nginx est incapable de résoudre l'adresse du conteneur Go. Comment gérez-vous la gestion de réseau (essaim, composer, découverte de service, env vars ...)? – Opnauticus

+0

en utilisant docker-compose – user3226932

Répondre

0

Il semble que les conteneurs ne peuvent pas s'entrecroiser?

Je vois deux possibilités:

Première: Assurez-vous chaque conteneur sont sur le même réseau

ou créer un réseau

docker network create nginx_go 
docker run --network=nginx_go ... 

Deuxième: Utilisation docker-compose

version: '3.3' 

services: 
    nginx: 
     image: nginx 
     # others details like volumes... 
    server: 
     image: go 
+0

oublié de mentionner que j'utilise Docker-composer version 3 – user3226932

+0

pouvez-vous nous montrer votre code go pls (la partie de l'initialisation du serveur) –

+0

ajouté le code Go – user3226932