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

时间:2018-05-12 20:25:40

标签: docker docker-compose

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

我使用角度CLI创建一个新的角度应用程序:

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"
                }
            ]
        },
...

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

但是,当我使用docker exec -it angular-docker bash打入容器时,我会在curl localhost:4200时收到回复。

我的环境:

  • 操作系统:Windows 10专业版10.0.16299内部版本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

3 个答案:

答案 0 :(得分:1)

在docker中使用EXPOSE时,端口可用于与docker网络中其他容器的tcp连接。如果您希望能够使用http连接端口,则应将端口从本地计算机映射到容器端口。

PORTS
 -3000:3000

如果第一个端口是本地计算机上的端口,则第二个端口位于容器上。

答案 1 :(得分:0)

尝试像这样改变

OnActivated()

答案 2 :(得分:0)

请您查看http://127.0.0.1:4200

在很多Linux服务器上,我遇到了“localhost”解析为“:: 1”为ipv6的问题,而应用程序只配置为侦听ipv4地址。用“127.0.0.1”仔细检查就可以解决这个问题。