Как запустить машину docker на homestead, когда порт 80 уже используется?

#docker #port #homestead #processmaker

#docker #порт #homestead #processmaker

Вопрос:

Я не администратор сервера, и я часто сталкиваюсь с проблемами, связанными с портами, ssh и тому подобным. Проблема, с которой я сейчас сталкиваюсь, связана с homestead и docker.

У меня есть приложение laravel, запущенное на homestead. Но теперь мне также нужно запустить Process Maker в homestead, чтобы я мог вызывать их API из своего приложения и использовать данные. Итак, я нашел образ docker eltercera/docker-processmaker , который хорошо работает на моем Mac, и протестировал API, и они работают нормально.

Я запускаю изображение с помощью этой команды:

 docker run -d -e "HTTPD_SERVER_ADMIN=rohan0793@gmail.com" -p 80:80 --name some-pkm eltercera/docker-processmaker/
  

И он работает хорошо. Но теперь, когда я установил docker-engine на свой компьютер homestead и попробовал то же самое, я получил следующую ошибку:

 docker: Error response from daemon: driver failed programming external connectivity on endpoint some-pkm (dee715e3d7bf47d48f6fbb4a8ba1418009b1a811ef043e18fb232132ec3b6a2d): Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use.
  

В нем говорится 0.0.0.0:80: bind: address is already in use . Теперь я не уверен, что это значит и как это решить и использовать приложение на моем компьютере homestead. Это как-то связано с переадресацией портов? Я могу запустить машину, используя -p as 90:90 , но я не знаю, как тогда получить к ней доступ.

Может кто-нибудь объяснить мне, чего мне здесь не хватает и что мне нужно изучить, прежде чем двигаться дальше?

Редактировать

Я пытался:

 docker run -d -e "HTTPD_SERVER_ADMIN=rohan0793@gmail.com" -p 90:80 -h processmaker.app --name some-pkm eltercera/docker-processmaker/
  

И отредактировал мой /etc/hosts файл на Mac, и теперь я могу это сделать processmaker.app:90 в своем браузере, и это работает. Но это было похоже на то, чтобы нажать и попробовать. Я до сих пор не понимаю, как я это решил.

Ответ №1:

Вы решили это, сказав -p 90:80 .

Что это делает, так это предоставляет внутренний порт 80 вашего контейнера Docker (тот, который ваш веб-сервер прослушивает внутри контейнера) как порт 90 на вашем главном компьютере (чтобы вы могли перейти к http://processmaker.app:90 нему в своем браузере).

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

Причина -p 80:80 не сработала в том, что «реальный» порт 80 уже использовался.

Причина -p 90:90 , по которой это не сработало, заключается в том, что контейнерное приложение прослушивает свой виртуальный порт 80, а раскрытие порта 90 не делает ничего полезного (ничего, связанного с ним внутри контейнера).

Вы могли бы выполнить -p 90:90 работу, переконфигурировав контейнерный веб-сервер для прослушивания порта 90 вместо порта 80. Это то, что вы бы сделали с неконтейнеризованным приложением, но с помощью Docker вы можете просто запускать все с настройками по умолчанию (порты, пути к файловой системе и т. Д.) И Соединять все вместе вне приложения при запуске контейнеров (необычное слово для этого: оркестровка).