Docker: 无法打开从容器到主机的端口
Docker: cannot open port from container to host
我正在使用 Docker for Mac
。我有一个 运行 服务器的容器,例如我的服务器是 运行 在端口 5000 上。我已经在 Dockerfile
上公开了这个端口
当我的容器处于 运行ning 状态时,我连接到该容器并通过下面的 运行ning 命令检查该服务器是否正常工作,并查看它的 returns 数据(一堆 html 和 javascript)
wget -d localhost:5000
注意,我启动了这个容器,还通过命令向外发布了端口:
docker run -d -p 5000:5000 <docker_image_name>
但是在 docker 主机(是我的 mac 和 运行ning El Capitan),我打开 chrome 并转到地址 localhost:5000
。它不起作用。请注意,如果我转到 localhost:4000
等任意端口,我会看到来自 chrome 的错误消息,例如:
This site can’t be reached
localhost refused to connect.
但是 localhost:5000
的错误消息是:
The localhost page isn’t working
localhost didn’t send any data.
看来我已经配置工作 "a little" 但有些地方不对。请告诉我如何解决这个问题。
请检查容器中的程序正在监听接口 0.0.0.0。
在容器中,运行命令:
ss -lntp
如果它看起来像:
LISTEN 0 128 127.0.0.1:5000 *:*
这意味着您的网络应用仅在本地主机上侦听,因此容器主机无法访问您的网络应用。您应该通过更改您的网络应用构建设置让您的服务器在 0.0.0.0
接口上监听。
例如,如果您的服务器是 nodejs 应用程序:
var app = connect().use(connect.static('public')).listen(5000, "0.0.0.0");
如果你的服务器是 web pack:
"scripts": {
"dev": "webpack-dev-server --host 0.0.0.0 --port 5000 --progress"
}
我在为 Mac 使用 Docker 时遇到了这个问题,试图 运行 Angular2 应用程序。
我通过将 package.json
中的 start
脚本更改为
解决了这个问题
"scripts": {
"start": "ng serve --host 0.0.0.0"
}
之前 start
只是 ng serve
。
我正在使用 Docker for Mac
。我有一个 运行 服务器的容器,例如我的服务器是 运行 在端口 5000 上。我已经在 Dockerfile
当我的容器处于 运行ning 状态时,我连接到该容器并通过下面的 运行ning 命令检查该服务器是否正常工作,并查看它的 returns 数据(一堆 html 和 javascript)
wget -d localhost:5000
注意,我启动了这个容器,还通过命令向外发布了端口:
docker run -d -p 5000:5000 <docker_image_name>
但是在 docker 主机(是我的 mac 和 运行ning El Capitan),我打开 chrome 并转到地址 localhost:5000
。它不起作用。请注意,如果我转到 localhost:4000
等任意端口,我会看到来自 chrome 的错误消息,例如:
This site can’t be reached
localhost refused to connect.
但是 localhost:5000
的错误消息是:
The localhost page isn’t working
localhost didn’t send any data.
看来我已经配置工作 "a little" 但有些地方不对。请告诉我如何解决这个问题。
请检查容器中的程序正在监听接口 0.0.0.0。
在容器中,运行命令:
ss -lntp
如果它看起来像:
LISTEN 0 128 127.0.0.1:5000 *:*
这意味着您的网络应用仅在本地主机上侦听,因此容器主机无法访问您的网络应用。您应该通过更改您的网络应用构建设置让您的服务器在 0.0.0.0
接口上监听。
例如,如果您的服务器是 nodejs 应用程序:
var app = connect().use(connect.static('public')).listen(5000, "0.0.0.0");
如果你的服务器是 web pack:
"scripts": {
"dev": "webpack-dev-server --host 0.0.0.0 --port 5000 --progress"
}
我在为 Mac 使用 Docker 时遇到了这个问题,试图 运行 Angular2 应用程序。
我通过将 package.json
中的 start
脚本更改为
"scripts": {
"start": "ng serve --host 0.0.0.0"
}
之前 start
只是 ng serve
。