EXPOSE в Dockerfile есть, а сервис снаружи недоступен
В Dockerfile указано:
FROM python:3.12-slim
COPY . /app
WORKDIR /app
EXPOSE 8080
CMD ["python", "-m", "app", "--host", "0.0.0.0", "--port", "8080"]
Контейнер запущен командой docker run -d --name api myapp:1.4. Внутри контейнера curl localhost:8080/health отвечает 200, а с хоста curl localhost:8080/health даёт Connection refused.
Что нужно исправить?
- Приложение слушает не тот интерфейс, нужно указать `--host 127.0.0.1`
- В `EXPOSE` не указан протокол: без записи вида `EXPOSE 8080/tcp` Docker считает порт объявленным только для внутренних нужд образа и не пробрасывает его на хост
- Опубликовать порт при запуске: `docker run -p 8080:8080 ...` — `EXPOSE` только описывает образ и порт на хосте не открывает
- Подключить контейнер к сети `host`, иначе обращения с хоста в контейнер невозможны
