Почему я не могу сопоставить порт из моего контейнера Postgres Docker? - PullRequest
0 голосов
/ 20 апреля 2019

Я создал контейнер postgres из официального изображения posgres.Я пытаюсь сопоставить порт 5432, чтобы я мог получить доступ к контейнеру с моего локального хоста.

Если я выставлю порт через Dockerfile, сопоставление не произойдет.Вот мой Dockerfile

FROM postgres

EXPOSE 5432:5432

Когда я создаю образ и запускаю его, вот что я получаю, когда запускаю docker ps, он видит это в столбце PORTS 5432/tcp

Когда я удаляю EXPOSE из Dockerfile и собираю это

FROM postgres

А затем создаю образ и передаю порт в командной строке docker run -p 5432:5432 -d postgres, порт действительно отображается.Когда я запускаю docker ps, я вижу 0.0.0.0:5432->5432/tcp в столбце PORTS.

Что я делаю не так?Как мне выставить порты в Dockerfile таким образом, чтобы они отображались?

1 Ответ

1 голос
/ 20 апреля 2019

Если вы хотите опубликовать порты, определенные в вашем Dockerfile, с помощью команды EXPOSE, вы можете использовать флаг -P:

docker run -P <container>

EXPOSE фактически ничего не делает сам по себе.Как упоминалось в документации Docker :

Инструкция EXPOSE сообщает Docker, что контейнер прослушивает указанные сетевые порты во время выполнения.

Инструкция EXPOSE не выполняетна самом деле опубликовать порт.Он функционирует как тип документации между человеком, который создает образ, и человеком, который запускает контейнер, о том, какие порты предназначены для публикации.Чтобы фактически опубликовать порт при запуске контейнера, используйте флаг -p на панели запуска Docker, чтобы опубликовать и сопоставить один или несколько портов, или флаг -P, чтобы опубликовать все открытые порты и сопоставить их с портами высокого порядка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...