如果端口80已经在使用,如何在宅基地上运行docker机?

我不是服务器pipe理员,我经常面临端口和ssh等服务器相关的问题。 我现在面临的问题是宅基地和docker工人。

我有一个在宅基地上运行的应用程序。 但是现在我也需要在家园中运行Process Maker ,以便我可以从我的应用程序中调用他们的API并使用这些数据。 所以我find了一个eltercera/docker-processmaker镜像eltercera/docker-processmaker ,它在我的mac上运行良好,并testing了API,它们工作正常。

我用这个命令运行镜像:

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

它运行良好。 但现在,当我在我的家园机器上安装docker引擎,并尝试相同的,我得到了以下错误:

 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运行机器,但是我不知道如何访问它。

有人可以向我解释我在这里失去什么,以及我需要学习之前,前进?

编辑

我试过了:

 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 ,它的工作原理。 但是,这就像打架和尝试。 我仍然不明白我是如何解决它的。

你用-p 90:80来解决它。

它的作用是将Docker容器的内部端口80(容器内部监听的端口)作为主机端口90公开您的浏览器)。

由于这个方便的function(Docker-controller虚拟networking堆栈),您的应用程序可以使用其默认端口,并且可以将其映射到“真实”networking上的任何空闲端口。 你也可以做更复杂的事情,例如只将端口暴露给其他容器而不暴露在外面。

原因-p 80:80不起作用的是“真实”端口80已经被使用。

原因-p 90:90不起作用的是容器应用程序侦听其虚拟端口80,并暴露端口90没有做任何有用的事情(没有任何连接到它的容器内)。

您可以通过重新configuration容器化的Web服务器来监听端口90而不是端口80来使-p 90:90工作。这就是您对非容器化应用程序所做的事情,但是使用Docker,您可以使用默认设置(端口,文件系统path等),并在启动容器时将应用程序连接到应用程序的外部(对于此:编排而言)。

Interesting Posts