2016-11-27 146 views
4

我正在使用Docker for Mac。我有一個運行服務器的容器,例如我的服務器運行在端口5000.我已經暴露了這個端口DockerfileDocker:無法打開從容器到主機的端口

當我的容器運行時,我連接到這個容器並檢查這個服務器是否工作或無法通過運行下面的命令,並看到它返回的數據(一串HTML和JavaScript)的

wget -d localhost:5000 

注意,我開始這個容器,並通過命令之外發布端口:

docker run -d -p 5000:5000 <docker_image_name> 

但在泊塢窗主機(是我的Mac並運行E l Capitan),我打開chrome並前往地址localhost:5000。它不起作用。只要稍微注意一下,如果我去到任意端口,如localhost:4000我看到錯誤消息從鉻如:

This site can’t be reached 
localhost refused to connect. 

但錯誤消息localhost:5000是:

The localhost page isn’t working 
localhost didn’t send any data. 

所以看起來我有配置的工作「有點」,但有些問題。請告訴我如何解決這個問題。

回答

6

請檢查容器中的程序是否正在監聽接口0.0.0.0。

在容器中,運行命令:

ss -lntp 

如果它看起來像:

LISTEN 0 128 127.0.0.1:5000 *:* 

這意味着你的Web應用程序只能在本地主機聽這樣的容器主機無法訪問您的Web應用程序。您應該通過更改您的Web應用程序構建設置讓您的服務器在0.0.0.0界面上聆聽。

例如,如果您的服務器的NodeJS應用:

var app = connect().use(connect.static('public')).listen(5000, "0.0.0.0"); 

如果你的服務器是網絡包:

"scripts": { 
    "dev": "webpack-dev-server --host 0.0.0.0 --port 5000 --progress" 
    } 
+0

感謝:d工程:) –

+0

VUA給予好評町的Cuong :) –

+0

幾個搜索小時後,你的答案救了我。謝謝! – Lebul

1

我使用泊塢的Mac,嘗試運行Angular2應用了這個問題。

我解決了該問題,通過改變我的package.json到

"scripts": { 
    ... 
    "start": "ng serve -H 0.0.0.0", # before, this was "start": "ng serve" 
    } 
相關問題