gpt4 book ai didi

docker - 无法连接到在 Windows 上使用 docker-compose 启动的容器的公开端口

转载 作者:行者123 更新时间:2023-12-02 18:44:28 25 4
gpt4 key购买 nike

我无法访问应通过 docker-compose 向主机公开端口的应用程序。这是一个可重现的例子:

我使用 Angular CLI 创建了一个新的 Angular 应用程序:

ng new angular-docker

然后我在该目录中创建一个包含以下内容的 Dockerfile:

FROM node:8

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app

RUN npm install

EXPOSE 4200

CMD ["npm", "start"]

接下来,我在同一目录中创建一个 docker-compose.yaml 文件:

version: '3'

services:
angular:
build: .
container_name: angular-docker
volumes:
- ./src:/usr/src/app/src
ports:
- "4200:4200"

然后我运行:

docker-compose up

我等到在 docker-compose 输出中得到以下行

angular-docker | ** Angular Live Development Server is listening on localhost: 4200, open your browser on http://localhost:4200/ **

来自 docker inspect angular-docker我看到端口转发规则已到位:

...
"Ports": {
"4200/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "4200"
}
]
},
...

现在,当我尝试转到 http://localhost:4200 时在 Chrome 中,我收到 ERR_EMPTY_RESPONSE。

但是,当我使用 docker exec -it angular-docker bash bash 进入容器,当我 curl localhost:4200 时,我得到了回应.

我的环境:

  • 操作系统:Windows 10 专业版 10.0.16299 Build 16299
  • Docker:18.03.1-ce-win65 (17513)

我认为这可能是防火墙问题。因此为了调试,我关闭了防火墙应用程序(我使用的是卡巴斯基安全软件),但没有成功。

为什么我不能从暴露的端口访问容器?

编辑:

netstat -an | findstr ":4200"返回以下内容:

Proto  Local Address          Foreign Address        State
TCP 0.0.0.0:4200 0.0.0.0:0 LISTENING
TCP [::1]:4200 [::]:0 LISTENING

最佳答案

您不能在 docker 容器中使用开箱即用的默认 npm start

一种替代方法是更新 package.json 中的命令以运行 ng serve -H 0.0.0.0,如下所示:

“开始”:“ng serve -H 0.0.0.0”

这个额外的-H 0.0.0.0是为了监听来自容器的所有接口(interface)。

然后,当您的端口映射正常工作时,您应该从主机上将您的网站连接到所需的端口 localhost:4200

关于docker - 无法连接到在 Windows 上使用 docker-compose 启动的容器的公开端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50310402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com