Docker Network reverse proxy sin docker-componer

El reto

Como se describió, quiero lograr el mismo objective con Docker como lo haría con la ayuda de Docker-Componer.
Quiero get una comprensión más profunda de Docker y habilitar la capacidad de trabajar con Docker en plataforms, donde Docker-Componer no es una opción.

Lo que hago actualmente (con Docker-Componer)

1)

Yo uso este file docker-compose:

--- version: '3' services: app: build: . proxy: build: docker/proxy ports: - "80:80" 

El service "aplicación" inicia un contenedor que ejecuta el nodo en el puerto 3002 (se expone en el file docker)

El service "proxy" inicia un contenedor que ejecuta un nginx con, entre otros, la siguiente conf:

 server { listen 80; server_name app; location / { proxy_pass http://app:3002; } } 

2)

Luego agrego esto a / etc / hosts de mi pc host:

 127.0.0.1 app 

3)

Ahora ejecuto docker-compose up y vist http: // app , que se ejecuta en la aplicación de nodo.

Agradable y simple, ¿verdad?


Ahora quiero hacer lo mismo solo con Docker.

Lo que he intentado

1 usando la misma configuration nginx.

2 Iniciando los contenedores con un script bash

Para lograr esto, yo

  1. Creó una networking
  2. Agregue la networking a ambos contenedores
  3. Configuración de "aplicación" -container hostname, network-alias y dns-search en "app" (porque esperaba que una de las opciones ayudaría)

Aquí el guion:

 docker network create --driver bridge dockertest_nw docker build -t dockertest_app . docker create \ --name dockertest_app_con \ --network dockertest_nw \ --hostname app \ --network-alias=app \ --dns-search=app \ dockertest_app docker build -t dockertest_proxy ./docker/proxy/ docker create \ --name dockertest_proxy_con \ --network dockertest_nw \ --hostname proxy \ --network-alias=proxy \ --dns-search=proxy \ -p 80:80 \ dockertest_proxy docker start dockertest_proxy_con docker start dockertest_app_con 

Lamentablemente, esto no funciona.

También sé que hay un service DNS de Docker que Docker-Comose utiliza de alguna manera y también debería usarlo de alguna manera.

¿Podría alguien dar algunas sugerencias?


Actualización: solo la información obtuve los siguientes loggings del contenedor nginx, que diría que muestra que el nginx no puede resolver la "aplicación":

 172.18.0.1 - - [13/Apr/2017:14:49:06 +0000] "GET / HTTP/1.1" 502 576 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36" "-" 2017/04/13 14:49:06 [error] 5#5: *13 connect() failed (111: Connection refused) while connecting to upstream, client: 172.18.0.1, server: app, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:3002/", host: "app" 

Estás tropezando con todas esas opciones. Todo lo que realmente necesita es --network-alias para establecer la app nombres cortos y el proxy en sus contenedores, que estarán disponibles además de los nombres de contenedor dockertest_app y dockertest_proxy .

 docker network create --driver bridge dockertest_nw docker build -t dockertest_app . docker create \ --name dockertest_app \ --network dockertest_nw \ --network-alias=app \ dockertest_app docker build -t dockertest_proxy ./docker/proxy/ docker create \ --name dockertest_proxy \ --network dockertest_nw \ --network-alias=proxy \ -p 80:80 \ dockertest_proxy docker start dockertest_proxy docker start dockertest_app