首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从主机连接到(公开、发布)端口

无法从主机连接到(公开、发布)端口
EN

Stack Overflow用户
提问于 2016-09-25 20:46:46
回答 2查看 661关注 0票数 0

我正在学习React.js的教程,我决定在Docker容器中工作。Here是本教程的代码。

本教程使用在容器的8080端口上运行的webpack-dev-server。我已经在我的Dockerfile中公开了这个端口,并且我用-P运行我的容器来发布这个端口。在容器内部,如果我使用wget http://localhost:8080,它会像预期的那样下载index.html。但是,如果我从我的主机上运行等效的PowerShell命令Invoke-WebRequest http://localhost:32769,我会得到下面的Invoke-WebRequest : The underlying connection was closed: The connection was closed unexpectedly.完整详细信息/再现步骤。

Dockerfile

代码语言:javascript
复制
FROM node
MAINTAINER Matthew Pirocchi <matthew.pirocchi@gmail.com>
RUN apt-get update && apt-get install -y vim
EXPOSE 8080

容器设置

代码语言:javascript
复制
docker run -itdP --name repro mpiroc/react-fundamentals
docker exec -it repro bash
# Following commands executed within container
mkdir -p /home/mpiroc/repos && cd /home/mpiroc/repos
git clone https://github.com/ReactjsProgram/React-Fundamentals.git
cd React-Fundamentals
git checkout video2
npm install
npm run start # start just runs `webpack-dev-server`

测试容器

代码语言:javascript
复制
# In a separate terminal
PS C:\Users\matth> docker exec -it repro bash
root@fd6c3102bc51:/# wget http://localhost:8080
... # index.html is downloaded as expected
root@fd6c3102bc51:/# exit
exit
PS C:\Users\matth> docker ps
CONTAINER ID        IMAGE                       COMMAND             CREATED             STATUS              PORTS                     NAMES
fd6c3102bc51        mpiroc/react-fundamentals   "node"              28 minutes ago      Up 28 minutes       0.0.0.0:32769->8080/tcp   repro
PS C:\Users\matth> Invoke-WebRequest http://localhost:32769
Invoke-WebRequest : The underlying connection was closed: The connection was closed unexpectedly.
At line:1 char:1
+ Invoke-WebRequest http://localhost:32769
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

为什么我的宿主机无法访问已发布的端口?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-25 21:47:09

我在this question中找到了答案。我需要将我的npm run start命令从:

代码语言:javascript
复制
"start": "webpack-dev-server"

代码语言:javascript
复制
"start": "webpack-dev-server --host 0.0.0.0"

这是因为在webpack-dev-server 1.8.0及更高版本中,默认情况下webpack-dev-server只监听localhost,而不监听机器的ip (本例中为容器)。

票数 3
EN

Stack Overflow用户

发布于 2016-09-25 20:57:09

看起来你正在运行Docker for Windows。如果您使用的是docker-machine安装,那么执行一个docker-machine ip default (您可能需要使用docker-machine ls并使用特定的节点名,而不是默认名称)。然后连接到该IP地址,以访问Docker在幕后运行的Linux虚拟机,而不是本地主机。因此,如果你得到:

代码语言:javascript
复制
docker-machine ip default
192.168.100.1

Invoke-WebRequest http://192.168.100.1:32769
....
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39686997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档