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" }