2016-09-29 32 views
0

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

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

Я бег изображения с этой командой:

docker run -d -e "[email protected]" -p 80:80 --name some-pkm eltercera/docker-processmaker/ 

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

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. Теперь я не уверен, что это значит и как разрешить это, и использовать приложение внутри моей машины-усадьбы. Это как-то связано с пересылкой портов? Я могу запустить машину, используя -p как 90:90, но я не знаю, как к ней будет обращаться.

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

EDIT

Я пробовал:

docker run -d -e "[email protected]" -p 90:80 -h processmaker.app --name some-pkm eltercera/docker-processmaker/ 

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

ответ

2

Вы решили это, сказав -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 вы можете просто запустить все с настройками по умолчанию (порты, пути к файловой системе и т. д.) и проводя вещи вместе за пределами приложения при запуске контейнеров (причудливое слово для этого: оркестровка).