0

我不是服务器管理员,我经常遇到与服务器相关的端口和 ssh 等问题。我现在面临的问题是宅基地和码头工人。

我有一个在宅基地上运行的 laravel 应用程序。但现在我还需要在宅基地中运行Process Maker,以便我可以从我的应用程序中调用他们的 API 并使用数据。所以我找到了一个eltercera/docker-processmaker在我的 mac 上运行良好的 docker 镜像并测试了 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。现在我不确定这意味着什么以及如何解决这个问题并在我的宅基地机器中使用该应用程序。这是否与端口转发有关?我可以使用-pas运行机器,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在浏览器中进行操作,并且可以正常工作。但这就像一击即中。我还是不明白我是怎么解决的。

4

1 回答 1

2

你通过说解决了它-p 90:80

这样做是将 Docker 容器的内部端口 80(您的网络服务器在容器内部侦听的端口)公开为主机上的端口 90(以便您可以http://processmaker.app:90在浏览器中访问)。

由于这个方便的功能(Docker-控制器虚拟网络堆栈),您的应用程序可以使用其默认端口,您可以将其映射到“真实”网络上的任何空闲端口。你也可以做更复杂的事情,比如只将端口暴露给其他容器,而不暴露给外部。

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

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

您可以-p 90:90通过重新配置容器化网络服务器以侦听端口 90 而不是端口 80 来完成工作。这就是您对非容器化应用程序所做的事情,但是使用 Docker,您可以使用默认设置(端口、文件系统)运行所有内容路径等)并在启动容器时在应用程序外部将事物连接在一起(这个花哨的词:编排)。

于 2016-09-29T08:09:28.100 回答