Docker:无法打开从容器到主机的端口

我正在使用Docker for Mac 。 我有一个运行服务器的容器,例如我的服务器运行在端口5000上。我已经暴露了Dockerfile这个端口

当我的容器运行时,我连接到这个容器,并检查,如果这个服务器是否正在运行或通过运行下面的命令,并看到它返回数据(一堆html和javascript)

 wget -d localhost:5000 

注意,我启动这个容器,并通过命令在外部发布端口:

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

但在docker主机(是我的Mac和运行埃尔卡皮坦),我打开铬并去寻址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. 

所以看起来我已经configuration了一些“有点”的工作,但是出了点问题。 请告诉我如何解决这个问题。

请检查容器中的程序是否正在侦听接口0.0.0.0。

在容器中,运行命令:

 ss -lntp 

如果它看起来像:

 LISTEN 0 128 127.0.0.1:5000 *:* 

这意味着您的Web应用程序只能在本地主机上侦听,因此容器主机无法访问您的Web应用程序。 您应该通过更改您的Web应用程序构build设置让您的服务器在0.0.0.0界面上进行侦听。

例如,如果您的服务器是nodejs应用程序:

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

如果您的服务器是networking包:

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

我有这个问题使用Docker for Mac,试图运行一个Angular2应用程序。

我通过改变我的package.json来解决这个问题

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