为何无法通过localhost访问容器内的Angular(Node.js)服务?
问题原因与解决方案
你的问题出在启动服务的命令上:docker compose run默认不会启用docker-compose.yaml中配置的端口映射,这就导致主机的localhost:4200无法转发到容器内的4200端口,只能通过容器所在的Docker网络IP直接访问服务。
为什么会这样?
docker compose run的设计是用来运行一次性临时容器,默认会忽略配置里的ports映射规则,也不会加入服务默认的网络(除非指定)。而你需要的是长期运行的开发服务,应该用docker compose up来启动,它会严格按照配置文件创建端口映射、网络等资源。
解决办法
有两种方式可以解决:
改用正确的启动命令:
用docker compose up启动服务,这会自动应用端口映射配置:sudo docker compose up my-website启动后直接访问
localhost:4200就能正常访问服务。如果必须用
docker compose run:
添加--service-ports参数,强制启用配置里的端口映射规则:sudo docker compose run --service-ports my-website执行后
localhost:4200就能正常访问。
额外验证
你的Dockerfile和docker-compose.yaml配置本身是没问题的:
- Dockerfile里
ng serve --host 0.0.0.0确保服务监听容器内所有网络接口,这个配置正确。 - docker-compose.yaml的
volumes和ports规则也没问题,只是启动命令没触发端口映射而已。
内容的提问来源于stack exchange,提问作者SHA256_foin
相关产品推荐
相关产品推荐

