Docker容器中Angular项目启动后出现Page not found问题求助
问题:Docker容器中Angular项目编译成功但访问404
我在Docker容器里基于Node 10.24运行特定版本Angular项目,执行命令:docker run -it -p 9004:4200 --name hiero_particulierv6.2 angular-node-image-v6
容器启动后编译提示成功,但访问localhost:9004时出现“Page not found”错误。
初始Dockerfile内容:
FROM node:10.24 AS ui-build WORKDIR /usr/src/app COPY . /usr/src/app/ ADD run.sh ./run.sh RUN npm install @angular/cli@7.3.9 && npm install RUN chmod 777 ./run.sh EXPOSE 9004 # using the script 'run.sh' to run the app # this script run the app depending on his name CMD ./run.sh particulier
容器运行正常,Node模块编译完成,但端口访问报错。后续我移除了Dockerfile中的EXPOSE 9004,因为启动脚本run.sh会根据传入的应用名称指定端口,传入particulier时端口为9004,脚本内容:
#!/bin/bash # Exit on error set -o errexit curdir=$(pwd) app="" port=0 extra="" if [ "$1" = "hiero" ]; then app="hiero" port="9000" # extra="--proxy-config ./dev_config/app.proxy.conf.js" elif [ "$1" = "admin" ]; then app="admin" port="9001" elif [ "$1" = "pdf" ]; then app="pdf" port="9002" elif [ "$1" = "pro" ]; then app="pro" port="9003" elif [ "$1" = "particulier" ]; then app="particulier" port="9004" else echo "Unknown app: $1" echo "Try: ./run.sh hiero" fi if [ ! -z "$app" ]; then ./node_modules/@angular/cli/bin/ng serve --aot --project $app --port $port $extra fi
解决方案
核心问题是端口映射不匹配+服务绑定范围限制:
端口映射错误:
脚本中particulier项目在容器内实际监听的是9004端口,但你执行docker run时用的是-p 9004:4200,把主机9004端口映射到了容器的4200端口,而容器内4200端口没有服务监听,导致访问404。
修正后的启动命令:docker run -it -p 9004:9004 --name hiero_particulierv6.2 angular-node-image-v6服务绑定范围限制:
ng serve默认只绑定容器内的localhost,外部主机无法访问该地址,需要在启动命令中添加--host 0.0.0.0参数,修改run.sh里的启动行:./node_modules/@angular/cli/bin/ng serve --aot --project $app --port $port --host 0.0.0.0 $extra关于
EXPOSE指令:
该指令仅用于声明容器要使用的端口,不影响实际端口映射功能,移除或保留均可。如果保留,建议和脚本中对应项目的端口保持一致(比如EXPOSE 9004),能让镜像的端口信息更清晰。
内容的提问来源于stack exchange,提问作者Jhessy ISMAËL
相关产品推荐
相关产品推荐

