В чем разница между публикацией 8080: 80 и 8080: 8080 в режиме Docker? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь запустить контейнер Дженкинса. Я использовал «docker run --restart всегда - name myjenkins -p 8080: 80 jenkins», но не могу получить доступ к jenkins в http://localhost:8080 в браузере. Если я использую docker run --restart always --name myjenkins -p 8080: 8080 jenkins, я могу получить доступ к URL-адресу jenkins.

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 07 сентября 2018

Синтаксис выглядит следующим образом. Подробнее о -p флаге.

docker run -p [ip-on-host:]port-on-host:port-in-container image-name

В вашем случае -p 8080:80 означает направление всего трафика на порт 80 в контейнере. Если вы проверяете состояние порта на хосте с помощью netstat -lntp|grep 8080, существует процесс, управляемый docker-proxy, который прослушивает порт 8080 на хост-компьютере. Он будет управлять маршрутизацией всего трафика между портом 8080 на хосте и портом 80 в контейнере.

0 голосов
/ 04 сентября 2018

Когда вы говорите 8080: 80, это означает, что любой запрос, поступающий на порт 8080, будет перенаправлен службе, работающей на порту 80 внутри вашего док-контейнера. Точно так же 8080: 8080 означает, что любой запрос, поступающий на порт 8080, будет перенаправлен на службу, работающую на порту 8080 внутри вашего контейнера

Вы также можете думать об этом как -

 Port for Outside World: Actual Port of service in container

Надеюсь, это поможет

0 голосов
/ 07 сентября 2018

Без Docker (мастер Linux)

image1

  • Каждое приложение должно использовать другой порт.
  • Вы можете получить доступ к своему приложению, используя непосредственно его порты (если они доступны, конечно):

    • APP_A: 192.168.4.5:8080
    • APP_B: 10.10.10.15:8081
    • APP_C: www.app.com:8082

С Docker (Linux-ниндзя)

enter image description here

  • Приложения могут использовать любой порт, потому что каждый из них " - это другой мир "
  • Вы не можете получить доступ к своим док-приложениям через свои внутренние порты:

    • APP_A: 192.168.4.5:8080
    • APP_B: 10.10.10.15:8080
    • APP_C: www.app.com:8080

Потому что, например, 8080 из APP_B виден только внутри контейнера APP_B . Никто не может получить доступ к этим приложениям.

Чтобы получить доступ к вашим док-приложениям, вы должны явно установить связь между:

Порты хоста Linux <-> внутри портов контейнеров.

enter image description here

Для этого вы можете использовать -p параметр

  • docker run -d -p 8080: 8080 APP_A ...
  • docker run -d -p 8080: 8081 APP_B ...
  • docker run -d -p 8080: 8082 APP_C ...

После этого вы можете получить доступ к вашим док-приложениям, используя его новые порты:

  • APP_A: 192.168.4.5:8080
  • APP_B: 10.10.10.15:8081
  • APP_C: www.app.com:8082

В чем разница между публикацией 8080: 80 и 8080: 8080 в режиме Docker?

  • С 8080: 80 вы ожидаете, что ваше приложение использует или запускается с внутреннего порта 80 внутри контейнера.
  • С 8080: 8080 вы ожидаете, что ваше приложение использует или запускается с внутреннего порта 8080 внутри контейнера.

Вам просто нужно выяснить, какой внутренний порт контейнера используется вашими jenkins, и поместить его в docker run -p ...

0 голосов
/ 04 сентября 2018

8080: 80 означает, что в контейнере вы используете порт 80 и перенаправляете этот порт на порт 8080 хост-машины. Таким образом, вы запускаете Jenkins на порту 80 внутри контейнера, где бы вы ни были в сценарии 2, вы запускаете Jenkins на порту 8080 внутри контейнера и выставляете его через тот же порт на хост-компьютере. Например, если я запускаю mysql в контейнере, я могу использовать 8080: 3306, поэтому mysql будет работать на порте 3306, но будет открыт на 8080 хост-машины, но если выбрать 8080: 80 для mysql, он может не работать, потому что согласно коду mysql связывается с портом 3306, а не с портом 80. Такой же сценарий и в вашем случае с Дженкинсом.

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