Tengo un archivo docker-compose.yml que uso para ejecutar una aplicación web.
version: '3' services: web: entrypoint: gunicorn myapp.wsgi:application --bind 0.0.0.0:7000 ... nginx: ports: # HOST:CONTAINER - 80:80 - 443:443 ... Dentro del contenedor de mi servicio nginx :
$ cat /etc/hosts 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 192.168.144.4 790c0822b887 $ curl http://web:7000 <h1>Bad Request (400)</h1> $ traceroute web traceroute to web (192.168.144.3), 30 hops max, 46 byte packets 1 ec2-user_web_1.ec2-user_default (192.168.144.3) 0.008 ms 0.007 ms 0.006 ms Así que puedo buscar el nombre de host web y está asignado a la dirección IP 192.168.144.3 , pero no lo veo en el /etc/hosts .
¿Cómo docker-compose configuró específicamente este contenedor para que curl conozca la dirección IP?
Docker proporciona un servicio de DNS (busque "resolución automática de DNS entre contenedores"), y Docker Compose proporciona una red predeterminada "definida por el usuario" que lo utiliza . Si observa /etc/resolv.conf dentro de su contenedor, debería apuntar a una dirección IP privada de Docker que proporciona resolución de nombre de host tanto para Internet general como para otros contenedores.
Más específicamente, en un contexto de Docker Compose, el nombre de cada entrada en los services: bloque se puede resolver como un nombre de host por otros contenedores lanzados desde el mismo archivo docker-compose.yml . No es necesario configurar container_name: , hostname: , links: o networks: ; todo esto se configura automáticamente para usted.