Nim*_*ima 1 docker docker-compose
我在访问应通过docker-compose将端口公开给主机的应用程序时遇到问题。这是一个可重现的示例:
我使用角度CLI创建一个新的角度应用程序:
ng new angular-docker
Run Code Online (Sandbox Code Playgroud)
然后,我在该目录中创建一个包含以下内容的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"]
Run Code Online (Sandbox Code Playgroud)
接下来,我在同一目录中创建一个docker-compose.yaml文件:
version: '3'
services:
angular:
build: .
container_name: angular-docker
volumes:
- ./src:/usr/src/app/src
ports:
- "4200:4200"
Run Code Online (Sandbox Code Playgroud)
然后我运行:
docker-compose up
Run Code Online (Sandbox Code Playgroud)
我等到在docker-compose输出中得到以下行
angular-docker | ** Angular Live Development Server is listening on localhost: 4200, open your browser on http://localhost:4200/ **
Run Code Online (Sandbox Code Playgroud)
从docker inspect angular-docker我看到的端口转发规则到位:
...
"Ports": {
"4200/tcp": [
{
"HostIp": "0.0.0.0",
"HostPort": "4200"
}
]
},
...
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试在Chrome中访问http:// localhost:4200时,我得到ERR_EMPTY_RESPONSE。
但是,当我docker exec -it angular-docker bash习惯于扑向容器中时,我会得到响应curl localhost:4200。
我的环境:
我认为这可能是防火墙问题。因此,为了进行调试,我关闭了防火墙应用程序(我正在使用Kaspersky Internet Security),但没有运气。
为什么我不能从裸露的端口访问容器?
编辑:
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
Run Code Online (Sandbox Code Playgroud)
您不能npm start在Docker容器中使用默认的开箱即用功能。
一种替代方法是更新您的命令以package.json使其ng serve -H 0.0.0.0像这样运行:
"start": "ng serve -H 0.0.0.0"
额外的-H 0.0.0.0是监听容器中的所有接口。
然后,当您的端口映射正常工作时,您应该localhost:4200从主机将站点放在所需的端口上。
| 归档时间: |
|
| 查看次数: |
3222 次 |
| 最近记录: |