Docker compor e balanceador de carga nginx

1

Atualmente, tenho 2 contêineres do Docker:

  • Aplicativo (frasco de python)
  • Balanceador de carga (nginx)

Estou iniciando os dois contêineres separadamente com o docker-composer up O Nginx está escutando na porta 8080 e deve encaminhar solicitações HTTP para o aplicativo que está escutando a porta 8081. Atualmente, isso não está funcionando, pois o nginx não sabe nada sobre o contêiner do aplicativo.

86615a5b0f02        parzee/loadbalancer   "/usr/local/bin/start"   3 minutes ago       Up 3 minutes        127.0.0.1:8080->8080/tcp   loadbalancer_loadbalancer_1
9adc8a04b356        parzee/application    "/usr/local/bin/start"   6 minutes ago       Up 5 minutes        127.0.0.1:8081->8081/tcp   application_application_1

Esta é a minha configuração padrão

upstream application {
    ip_hash;
        server application_application_1:8081 fail_timeout=0;
        server application_application_2:8081 fail_timeout=0;
    keepalive 64;
}

server {
    listen 8080;
    server_name loadbalancer;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;

    #Timeout after 8 hours
    proxy_read_timeout 43200000;
    proxy_connect_timeout 43200000;

        proxy_redirect off;
        if (!-f $request_filename) {
            proxy_pass http://application;
            break;
        }
    }
}

Eu recebo:

2016/02/15 08:42:07 [emerg] 21#0: host not found in upstream "application_application_1:8081" in /etc/nginx/sites-enabled/default:3
2016/02/15 08:42:10 [emerg] 22#0: host not found in upstream "application_application_1:8081" in /etc/nginx/sites-enabled/default:3

Como definir minha configuração nginx usando hosts ou endereços IP? Eu não usei endereços IP, pois a janela de encaixe pode atribuir IPs diferentes de um intervalo conhecido. Alguma sugestão? Devo iniciar todos eles em um único arquivo docker-compose.yml?

    
por spicyramen 15.02.2016 / 09:53

2 respostas

1

você definiu um link para application_application_1 em seu arquivo docker-compose.yml?

    
por 16.02.2016 / 11:23
0

Links resolveram o problema:

database:
  image: parzee/database
  volumes_from:
    - dbdata
  ports:
    - "5432:5432"

# RABBITMQ TCP:5672
rabbitmq:
  image: parzee/rabbitmq-server
  hostname: rabbitmq
  ports:
    - "5672:5672"
    - "15672:15672"

# LIGHTTPD TCP:8083
lighttpd:
  image: parzee/lighttpd
  hostname: lighttpd
  ports: 
    - "8083:8083"
  volumes:
    - /usr/local/src/containers/application/volumes/imbue/:/usr/local/src/imbue/application/imbue/utils/security/des/
    - /usr/local/src/containers/lighttpd/volumes/log/:/var/log/lighttpd/ 

# APPLICATION TCP:8081
application_1:
  image: parzee/application
  hostname: application_1
  links:
        - database:database
        - lighttpd:lighthttpd
        - rabbitmq:rabbitmq
    
por 16.02.2016 / 11:27