我不是服务器管理员,并且经常遇到与端口和SSH等此类服务器相关的问题。我现在面临的问题是宅基地和 docker 。
我有一个在宅基地上运行的laravel应用程序。但是现在我也需要在家中也运行Process Maker,以便可以从我的应用程序中调用它们的API并使用数据。因此,我找到了一个在我的Mac上运行良好的docker image eltercera/docker-processmaker
并测试了API,它们工作正常。
我使用以下命令运行图像:
docker run -d -e "HTTPD_SERVER_ADMIN=rohan0793@gmail.com" -p 80:80 --name some-pkm eltercera/docker-processmaker/
而且运行良好。但是现在当我在我的宅基地机器上安装docker-engine并尝试相同时,出现以下错误:
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/
并在Mac上编辑了
/etc/hosts
文件,现在我可以在浏览器中执行processmaker.app:90
,并且可以正常工作。但是,这就像尝试。我还是不明白我是怎么解决的。
最佳答案
您通过说-p 90:80
解决了它。
这样做是将Docker容器的内部端口80(网络服务器在容器内部侦听的端口)公开为主机计算机上的端口90(以便您可以在浏览器中转到http://processmaker.app:90
)。
由于此便利的功能(Docker Controller 虚拟网络堆栈),您的应用程序可以使用其默认端口,并且可以将其映射到“真实”网络上的任何可用端口。您还可以做更复杂的事情,例如仅将端口暴露给其他容器,而不暴露给外部。-p 80:80
不起作用的原因是“实际”端口80已被使用。-p 90:90
不起作用的原因是容器应用程序在其虚拟端口80上进行侦听,而暴露端口90并没有做任何有用的事情(在容器内部未与其进行任何连接)。
您可以通过重新配置容器化的Web服务器以侦听端口90而不是端口80来使-p 90:90
工作。这就是使用非容器化应用程序的方法,但是使用Docker,您可以使用默认设置(端口,文件)运行所有操作系统路径等),然后在启动容器时将这些东西连接到应用程序外部(这是花哨的词:编排)。
关于docker - 当端口80已在使用中时,如何在宅基地上运行docker计算机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39764251/