Docker运行Node.js .mjs后缀Express应用无日志无响应问题求助
问题定位
首先可以明确:该问题与.mjs后缀无关,Node 14原生支持ES模块规范的.mjs格式文件,Docker环境下运行不需要针对该后缀做特殊配置。你遇到的无日志、端口无法访问的问题可从以下几个方向排查解决:
- 端口未做映射
Dockerfile中的EXPOSE 80仅为端口声明,不会自动完成宿主机到容器的端口映射。启动容器时需添加端口映射参数,正确启动命令为:docker run -p 80:80 my-app:latest - Node输出缓冲导致无日志
Node默认在非TTY环境(Docker容器默认运行环境)下会开启stdout/stderr缓冲,小体积日志不会实时输出到控制台。可以修改Dockerfile的启动命令,关闭缓冲:CMD node --unbuffered index.mjs - Express监听地址绑定错误
如果你的Express服务启动时绑定的是127.0.0.1,则仅能在容器内部访问,宿主机无法连通。需要修改监听地址为0.0.0.0:app.listen(80, '0.0.0.0', () => { console.log('服务启动成功,监听端口80') }) - 容器内手动排查验证
可以进入运行中的容器手动执行启动命令,确认服务本身是否正常:
执行后查看是否有报错或启动日志输出,即可快速定位问题根因。docker exec -it <替换为你的容器ID> sh node index.mjs
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

