2016-09-29 113 views
0

我不是服務器管理員,我經常面臨與端口和ssh等服務器相關的問題。我現在面臨的問題是家園和碼頭工人。如何在端口80已被使用的情況下在宅基地上運行碼頭機?

我有一個在宅基地上運行的laravel應用程序。但是現在我也需要在家園中運行Process Maker,以便我可以從我的應用程序調用它們的API並使用這些數據。所以我找到了一個Docker鏡像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運行機器,但我不知道如何訪問它。

有人可以向我解釋我在這裏失去了什麼,以及在繼續前進之前我需要學習什麼?

編輯

我想:

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

和編輯在Mac上我/etc/hosts文件,現在我可以在我的瀏覽器做processmaker.app:90和它的作品。但這就像是碰撞並嘗試。我仍然不明白我是如何解決它的。

回答

2

您通過說-p 90:80解決了這個問題。

這是幹什麼的將Docker容器的內部端口80(您的Web服務器在容器內偵聽的端口)作爲主機端口90公開(以便您可以在瀏覽器中訪問http://processmaker.app:90)。

由於此便捷功能(Docker控制器虛擬網絡堆棧),您的應用程序可以使用其默認端口,並且可以將其映射到「真實」網絡上的任何空閒端口。你也可以做更復雜的事情,比如只將端口暴露給其他容器,而不是暴露在外面。

-p 80:80不起作用的原因是「真實」端口80已被使用。

-p 90:90不起作用的原因是容器應用程序偵聽其虛擬端口80,並暴露端口90沒有做任何有用的事情(沒有任何連接到它的容器內)。

您可以通過重新配置容器化的網絡服務器來監聽端口90而不是端口80來運行-p 90:90。這就是您對非容器化應用程序執行的操作,但通過Docker,您可以使用默認設置(端口,文件系統路徑等),並在啓動容器時將應用程序連接到應用程序的外部(對於此:編排而言,花哨詞)。

相關問題