Докер EXPOSE ссылается на порт контейнера или порт хоста? - PullRequest
0 голосов
/ 29 января 2019

Команда Dockerfile EXPOSE и аргумент docker run --expose говорят Docker, что порт должен быть открыт.

При публикации портов с -p вы можете отобразить внешний хост-порт к другому внутреннему порту контейнера , например docker run -p 8080:80, где 8080 - хост-порт , а 80 - контейнерный порт .

Мой вопрос: EXPOSE относится к внутреннему порту контейнера или к порту внешнего хоста?

Ответы [ 4 ]

0 голосов
/ 29 января 2019

Инструкция EXPOSE документирует порт, на котором ожидается прослушивание приложения внутри контейнера.Важное слово там - «документы».Он не меняет поведение докера, запускающего ваш контейнер, не публикует порт и не влияет на возможность соединения между контейнерами.

Независимо от того, открываете ли вы порт, вам необходимо отдельно опубликоватьпорт для доступа к нему из-за пределов контейнерной сети.И независимо от того, выставляете ли вы порт или нет, вы можете подключаться между контейнерами в одной и той же сети докеров.

Существуют различные инструменты, которые могут использовать эти метаданные образа для автоматического обнаружения вашего приложения.Сюда входит флаг -P для публикации всех портов контейнера на случайных портах хоста с высоким номером.Вы также увидите, что обратные прокси (например, traefik) используют это при запросе механизма докера, чтобы определить порт по умолчанию, который будет использоваться для вашего контейнера.

0 голосов
/ 29 января 2019

Согласно документации , инструкция EXPOSE информирует Docker о том, что контейнер прослушивает указанные сетевые порты в время выполнения .Таким образом, это относится к внутреннему контейнеру .

EXPOSE, обеспечивающему связь между контейнером и другими контейнерами в той же сети .Но это не позволяет общаться с хост-машиной или контейнерами в другой сети!Чтобы разрешить это, вам необходимо опубликовать порт с опцией -p.

0 голосов
/ 29 января 2019

EXPOSE означает, что эти открытые порты этого текущего контейнера доступны / доступны для всех контейнеров, находящихся в одной сети.

0 голосов
/ 29 января 2019

Инструкция EXPOSE в Dockerfile относится к порту контейнера.

...