Trầ*_* Dự 5 docker dockerfile docker-networking
我正在使用Docker for Mac.我有一个运行服务器的容器,例如我的服务器在端口5000上运行.我已经暴露了这个端口Dockerfile
当我的容器运行时,我连接到这个容器并通过运行以下命令检查此服务器是否正常工作,并看到它返回数据(一堆html和javascript)
wget -d localhost:5000
Run Code Online (Sandbox Code Playgroud)
注意,我启动此容器并通过命令在外部发布端口:
docker run -d -p 5000:5000 <docker_image_name>
Run Code Online (Sandbox Code Playgroud)
但是在docker主机(是我的mac并运行El Capitan),我打开chrome并转到地址localhost:5000.它不起作用.只是一点注意,如果我去任何任意端口,例如localhost:4000我看到来自chrome的错误消息,例如:
This site can’t be reached
localhost refused to connect.
Run Code Online (Sandbox Code Playgroud)
但错误信息localhost:5000是:
The localhost page isn’t working
localhost didn’t send any data.
Run Code Online (Sandbox Code Playgroud)
所以我似乎已经将工作配置为"一点点",但有些不对劲.请告诉我如何解决这个问题.
请检查容器中的程序是否正在侦听接口0.0.0.0.
在容器中,运行命令:
ss -lntp
Run Code Online (Sandbox Code Playgroud)
如果它看起来像:
LISTEN 0 128 127.0.0.1:5000 *:*
Run Code Online (Sandbox Code Playgroud)
这意味着您的Web应用程序仅在localhost上侦听,因此容器主机无法访问您的Web应用程序.您应该0.0.0.0通过更改Web应用程序构建设置使服务器在界面上进行侦听.
例如,如果您的服务器是nodejs app:
var app = connect().use(connect.static('public')).listen(5000, "0.0.0.0");
Run Code Online (Sandbox Code Playgroud)
如果您的服务器是Web包:
"scripts": {
"dev": "webpack-dev-server --host 0.0.0.0 --port 5000 --progress"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1280 次 |
| 最近记录: |