La configuración de los puertos del contenedor Docker es incorrecta.
Tengo una aplicación simple que quiero “dockerizar”. Es una API simple que funciona correctamente cuando la ejecuto en mi máquina y es accesible en http://127.0.0.1:8000/
Este es el Dockerfile que creé:
FROM python:3.6-slim-stretch
WORKDIR /code
COPY requirements.txt /code
RUN pip install -r requirements.txt --no-cache-dir
COPY . /code
CMD ["uvicorn", "main:app", "--reload"]
Luego creo la imagen usando este comando sudo docker build -t test .
Y luego lo corro de esta manera sudo docker run -d -p 8000:8000 test
El problema es que no puedo acceder a él en http://127.0.0.1:8000/ aunque no conozco el problema.
PD: cuando reviso los puertos de mi contenedor, obtengo 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp
Quiero saber qué está causando este problema y cómo solucionarlo.
davy.ai
El problema probablemente se debe a que el contenedor está escuchando en su propia interfaz de red y no en la interfaz de red de la máquina anfitriona.
Para solucionar esto, puede modificar la línea
CMD
en su archivo Dockerfile para incluir el argumento--host
para Uvicorn, de la siguiente manera:Esto hará que Uvicorn escuche en todas las interfaces de red disponibles, incluida la de la máquina anfitriona.
Después de reconstruir y ejecutar el contenedor con el archivo Dockerfile modificado, debería poder acceder a la API en http://127.0.0.1:8000/.