我无法访问应通过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
时收到回复。
我的环境:
我认为这可能是防火墙问题。所以为了调试,我关闭了防火墙应用程序(我使用卡巴斯基互联网安全),没有运气。
为什么我不能从暴露的端口访问容器?
编辑:
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
答案 0 :(得分:1)
在docker中使用EXPOSE时,端口可用于与docker网络中其他容器的tcp连接。如果您希望能够使用http连接端口,则应将端口从本地计算机映射到容器端口。
PORTS
-3000:3000
如果第一个端口是本地计算机上的端口,则第二个端口位于容器上。
答案 1 :(得分:0)
尝试像这样改变
OnActivated()
答案 2 :(得分:0)
在很多Linux服务器上,我遇到了“localhost”解析为“:: 1”为ipv6的问题,而应用程序只配置为侦听ipv4地址。用“127.0.0.1”仔细检查就可以解决这个问题。