erro 503 ao usar o contêiner nginx-proxy como um servidor front-end para acessar vários contêineres no mesmo host

1

Eu quero poder ter acesso a vários contêineres, no mesmo host, contendo aplicativos da Web.

Quando quero acessar o host (por endereço IP) ou os containers (por exemplo, host_ip_adress / container1), recebo um erro 503 de nginx . O que eu quero é acessar meu container1 por ip_addrress_host / container1.

A solução que encontrei na internet foi definir um servidor front-end nginx-proxy (fonte: link )

Meu arquivo de composição do docker: docker-compose.yml

version: '2'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock
  site_a:
   image: php:7.0-apache
   expose:
   - "80"
   environment:
   - VIRTUAL_HOST=container1
  volumes:
   - ./php:/var/www/html
 site_b:
   image: php:7.0-apache
   expose:
   - "80"
   environment:
   - VIRTUAL_HOST=container2
   volumes:
   - ./php:/var/www/html

Eu corro com o comando :

docker-compose up

Minhas entradas no arquivo / etc / hosts :

127.0.1.1       container1
127.0.0.1       container2

Os registros que vejo quando faço uma solicitação do lado de fora:

nginx-proxy_1  | nginx.1    | 192.168.12.28 192.168.12.82 - - [25/Oct/2017:09:46:42 +0000] "GET /container1 HTTP/1.1" 503 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
nginx-proxy_1  | nginx.1    | 192.168.12.28 192.168.12.82 - - [25/Oct/2017:09:46:42 +0000] "GET /favicon.ico HTTP/1.1" 503 615 "http://192.168.12.28/container1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

Obrigado pela sua ajuda e desculpe pelo meu mau inglês! : -)

Editar:

Aqui estão os meus registros para o container nginx-proxy no início:

forego     | starting dockergen.1 on port 5000
forego     | starting nginx.1 on port 5100
dockergen.1 | 2017/10/25 14:01:53 Generated '/etc/nginx/conf.d/default.conf' from 3 containers
dockergen.1 | 2017/10/25 14:01:53 Running 'nginx -s reload'
nginx.1    | 2017/10/25 14:01:54 [warn] 30#30: server name "192.168.12.28/container1" has suspicious symbols in /etc/nginx/conf.d/default.conf:60
nginx.1    | 2017/10/25 14:01:54 [warn] 30#30: server name "192.168.12.28/container2" has suspicious symbols in /etc/nginx/conf.d/default.conf:74
dockergen.1 | 2017/10/25 14:01:54 Watching docker events
dockergen.1 | 2017/10/25 14:01:54 Contents of /etc/nginx/conf.d/default.conf did not change. Skipping notification 'nginx -s reload'

Edit2: Eu tentei "custumize" o nginx-proxy com o arquivo de configuração dado por Paweł Tatarczuk ( link )

Agora, quando faço uma solicitação como link , obtenho este log:

nginx-proxy_1  | nginx.1    | 2017/10/26 08:46:19 [error] 41#41: *1 open() "/etc/nginx/html/container1" failed (2: No such file or directory), client: 192.168.12.82, server: 192.168.12.28, request: "GET /container1 HTTP/1.1", host: "192.168.12.28"

Editar 3: Adicionar o? para reescrever

nginx-proxy_1  | nginx.1    | 2017/10/26 09:11:00 [error] 31#31: *1 container1 could not be resolved (2: Server failure), client: 192.168.12.82, server: 192.168.12.28, request: "GET /container1 HTTP/1.1", host: "192.168.12.28"
    
por Benjamin Seche 25.10.2017 / 14:53

1 resposta

0

What I want is to access my container1 by ip_addrress_host/container1.

Tem certeza de que deseja acessar o contêiner com, por exemplo, link ? Então, jwilder/nginx-proxy não é a melhor abordagem.

Seu proxy está escutando localmente na porta 80, ele fará a solicitação de proxy para container1 e container2 , mas os caminhos de proxy não serão /container1 e /container2 .

Curl

curl -H "Host: container1" localhost

Navegador

Abra o link

Você pode anexar uma configuração personalizada que cuidará dos caminhos de proxy para tornar ip_address/container-name work:

  1. Adicione isso a volumes : ./custom.conf:/etc/nginx/conf.d/custom.conf
  2. Crie custom.conf ao lado de docker-compose.yml :

    server {
        server_name 192.168.X.Y;
        listen 80;
    
        location ~ ^/([^/]+)(/.*)? {
            proxy_pass http://$1$2;
        }
    }
    
  3. Contêineres de links

    nginx-proxy:
      ...
      links:
        - site_a:container1
        - site_b:container2
    

Isto é apenas para começar, você deve melhorar isso para atender às suas necessidades. Deve funcionar com link ou link .

Por favor, note que há uma reescrita, então link é proxied para link . Presumi que você não deseja solicitações com /container1 de prefixo para seu conatiner de destino.

    
por 26.10.2017 / 09:53