¿Cómo asignar nombres de host a los contenedores Docker?

Estoy ejecutando Docker en Windows (no la versión nativa, es decir, la que se ejecuta en una máquina virtual a través de docker-machine ).

Actualmente tengo los sitios web de acceso así:

 192.168.99.100:8080 for website 1 192.168.99.100:8081 for website 2 192.168.99.100:8082 for website 3 

Esto es un verdadero dolor por razones obvias.

Quiero poder hacerlo como solía hacerlo con Apache Virtual Hosts, donde modifico el file hosts y luego simplemente website1.dev algo como: website1.dev .

¿Cómo puedo hacer esto para los contenedores Docker?

Mi primera solución fue simplemente agregar lo siguiente a los files hosts en mi máquina con Windows, así:

 192.168.99.100 docker.dev 

Sin embargo, docker.dev solo reenviará a 192.168.99.100:80 (es decir, el website 1), debido a que no puede colocar puertos en el file de hosts.

192.168.99.100 es la dirección IP de una docker-machine: para asignarle un nombre a esa IP, deberá modificar el file de host de Windows usted mismo.

Y eso supone que la IP de la máquina acoplable VM se ha corregido: vea mi script en esta respuesta .

Para networkingirigir realmente al server Apache correcto dentro de la VM, necesita otro contenedor que:

  • escucha en el puerto 80 de manera pnetworkingeterminada
  • analizar la URL y el proxy-pass (networkingirigir) a la url real correcta: puerto.

     http://website1.dev => networkingirect to port 8080 http://website2.dev => networkingirect to port 8081 http://website3.dev => networkingirect to port 8082 

(con website1.dev , website2.dev y website3.dev todos agregados en el file de hosts de Windows, con la misma URL 192.168.99.100)

Por ejemplo, verifique traerfik


Esto difiere del nombre de host de un contenedor, como lo ven otros contenedores.

docker-compose extra-host es de hecho equivalente a docker run --add-host

Pero un docker-compose puede usar hostname: directamente para arreglar un nombre de host en un contenedor.
Eso debería ser suficiente para hacer reference a cada contenedor por su nombre.