Mi configuración es la siguiente:
Mi archivo docker-compose:
version: "3" services: backend: ports: - "5000:5000" image: <backend-image> frontend: depends_on: - backend ports: - "80:80" links: - "backend:backend-python" image: <frontend-image>El nginx.conf
server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri /index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } Desde la interfaz, envío solicitudes a http://backend-python:5000/<my-endpoint> . backend-python se define dentro de la especificación de frontend en docker-compose como nombre de host del backend. Cuando ejecuto docker-compose up localmente y abro localhost en un navegador, la página se muestra como se esperaba. Cuando ejecuto docker-compose up en una Raspberry Pi 3, la interfaz no puede resolver http://backend-python:5000/<my-endpoint> cuando abro la página localmente en mi computadora portátil.
También traté de reemplazar nginx con servir la compilación usando serve . Esto conduce al mismo comportamiento que el descrito anteriormente.
Al buscar en Google, me parece que el uso de docker-compose crea su propia red en la que cada contenedor se puede encontrar por su nombre o nombres definidos en los links .
¿Alguien tiene idea de por qué el nombre no se puede resolver al acceder a la página desde otra máquina?
Una aplicación frontend se ejecuta dentro de un navegador y cuando la aplicación intenta llegar a una API, es el navegador el que intenta comunicarse con ella.
Cuando aloja una aplicación frontend dentro de la ventana acoplable con nginx, todo lo que hace el contenedor es servir el archivo estático que necesita el navegador, pero no es nginx el que intenta comunicarse con su API.
Es por eso que su navegador no puede acceder a su backend usando el nombre del contenedor, necesita exponer su API y cambiar la API/URL backend en su aplicación frontend para usar http://localhost:5000 .