Проблема с раскрытием Docker Port - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь упаковать военный файл, используя образ Docker tomcat.Я пытаюсь открыть порт Tomcat в образе для внешнего доступа к нему.

Это мой файл Docker

 FROM tomcat8:3.0.0

 COPY target/hello-world-war-1.0.0.war /usr/local/tomcat/webapps

 EXPOSE 8080

Однако, когда я создаю этот образ, запустите его ипопробуйте получить доступ через мой хост-браузер (localhost: 8080), он не достигает конечной точки, поэтому он не работает должным образом

Мне все еще приходится открывать порт снаружи с помощью ключа -p.

Что я пропустил?или использование EXPOSE что-то еще?

Моя конечная необходимость - это развернуть это в kubernetes.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Что я пропустил?

Вам нужно каким-то образом опубликовать порт:

  • , либо напрямую опубликовав его в docker runкоманда переназначает директиву EXPOSE Dockerfile на другой порт хоста, используя (обратите внимание на строчную букву p):

    -p=[]      : Publish a container᾿s port or a range of ports to the host
    
  • или, как указано в документации докера , неявно публикуетпорты, перечисленные в директиве EXPOSE Dockerfile с использованием (примечание заглавная P):

    -P         : Publish all exposed ports to the host interfaces
    

Моя конечная необходимость - иметь возможность развернуть это в kubernetes.

И для этой цели вы будете использовать порты, перечисленные в манифестах k8s, аналогичным образом.Скажем, вы открываете порт 8080 в своем образе докера (и публикуете его с -p или -P), затем вы будете использовать его в спецификации контейнера (точный манифест в зависимости от выбранного типа объекта k8s) и очень вероятно позже в манифесте службы, ив каждом слое вы можете изменить отображение портов (аналогично docker run -p mapping host: docker port, если вам нужно сделать это, на разные значения).Таким образом, что касается k8s, если вы EXPOSE порт в Dockerfile и он корректно работает локально в контейнере, а также на хосте с помощью любых средств его публикации (docker run с -p или -P), он будет работать и в kubernetes.(насколько вы перечислите это в надлежащих файлах манифеста).

0 голосов
/ 12 июня 2018

Оператор EXPOSE в вашей войне просто означает, что война прослушивает порт 8080 в образе, предоставляя доступ к вашему приложению через этот порт.

Это, однако, не означает, что он открывает эти порты.Таким образом, вам все еще нужно использовать ключ -p, чтобы открыть внутренний и / или внешний порт докера, чтобы разрешить трафик между контейнерами и / или внешними соединениями.

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

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