You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法通过localhost访问容器内的Angular(Node.js)服务?

问题原因与解决方案

你的问题出在启动服务的命令上:docker compose run默认不会启用docker-compose.yaml中配置的端口映射,这就导致主机的localhost:4200无法转发到容器内的4200端口,只能通过容器所在的Docker网络IP直接访问服务。

为什么会这样?

docker compose run的设计是用来运行一次性临时容器,默认会忽略配置里的ports映射规则,也不会加入服务默认的网络(除非指定)。而你需要的是长期运行的开发服务,应该用docker compose up来启动,它会严格按照配置文件创建端口映射、网络等资源。

解决办法

有两种方式可以解决:

  1. 改用正确的启动命令:
    用docker compose up启动服务,这会自动应用端口映射配置:

    sudo docker compose up my-website
    

    启动后直接访问localhost:4200就能正常访问服务。

  2. 如果必须用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:17:10