@alekssamos
Программист любитель

Как работает EXPOSE?

Если команды EXPOSE в dockerfile нет, всё хорошо.
Если её написать, то порт наоборот закрывается и доступ снаружи (из вне) к приложению в контейнере уже получить нельзя.

Так она открывает порт или закрывает?

Создал минимально воспроизводимый пример c hello world и не поверите, что есть EXPOSE, что нет, работает в любом случае.
А на реальном моём большом проекте - нет.
То есть в моём основном проекте она порт закрывает,
а в проекте для примера или открывает, или вообще никакого влияния не оказывает.
  • Вопрос задан
  • 682 просмотра
Решения вопроса 1
@q2digger
никого не трогаю, починяю примус
Идем в документацию https://docs.docker.com/engine/reference/builder/ и читаем.

The EXPOSE instruction does not actually publish the port. It functions as a type of documentation between the person who builds the image and the person who runs the container, about which ports are intended to be published. To actually publish the port when running the container, use the -p flag on docker run to publish and map one or more ports, or the -P flag to publish all exposed ports and map them to high-order ports.

я очень часто вижу, что в контейнерах вообще не используют EXPOSE , просто описывают в docker-compose какие порты как должны пробрасываться и так далее. Но когда-то считалось хорошим правилом описывать в Dockerfile с помощью EXPOSE что и как должно в контейнере торчать наружу. Не отменяя при этом необходимости сделать docker -p 80:80 ну или что там вам надо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alekssamos Автор вопроса
Программист любитель
EXPOSE? здесь оказался не причём.
Проблема была в compose yaml
В коротком синтаксисе не работали определения портов через переменные окружения
"${PORT}:${PORT}"
А через длинный список, где отдельно указываются target и publish, там заработало как нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы