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

使用Docker Compose构建后localhost无法加载的排查求助

容器运行但端口无响应的排查建议

项目背景

项目结构

client
 src
  scripts
   app.js
 dockerfile
 package.json

server
 app.js
 dockerfile
 package.json

client Dockerfile

FROM node
WORKDIR /client
RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
COPY package.json .
RUN pnpm install
COPY . .
EXPOSE 3000
CMD ["pnpm", "start"]

server Dockerfile

FROM node
WORKDIR /app
RUN curl -f https://get.pnpm.io/v6.16.js | node - add --global pnpm
COPY ./package.json .
RUN pnpm install
COPY . .
EXPOSE 80
CMD ["pnpm", "start"]

docker-compose.yaml

version: "3.8"
services:
  server:
    build: ./server
    restart: always
    ports:
      - "80:80"
    volumes:
      - logs:/app/logs
      - ./server:/app
      - /app/node_modules
  client:
    build: ./client
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - ./client/src:/app/src
    stdin_open: true
    tty: true

volumes:
  data:
  logs:

执行docker compose build构建成功,docker compose up后容器显示运行,但访问localhost:3000或localhost:8080无响应,以下是排查建议:


  • 检查容器状态与日志

    • 执行docker compose ps确认两个容器是否处于Up状态,有没有出现重启循环(状态显示Restarting)
    • 查看容器启动日志:docker compose logs server和docker compose logs client,重点看pnpm start命令是否正常执行,有没有依赖安装失败、服务启动报错等信息
  • 修正服务监听地址

    • Node.js服务默认常监听127.0.0.1,但容器内的localhost与主机网络隔离,必须让服务监听0.0.0.0才能对外提供访问
    • 检查client的开发服务器配置(如webpack-dev-server、vite),确保设置host: '0.0.0.0';server端(express/koa等)要修改为app.listen(端口, '0.0.0.0')
  • 修复挂载卷路径不匹配问题

    • client的Dockerfile设置的工作目录是/client,但docker-compose中volume挂载的是./client/src:/app/src,路径不匹配会导致容器内找不到正确的代码文件
    • 修正client的volume配置为:./client/src:/client/src,与Dockerfile的WORKDIR保持一致
  • 核对端口映射与实际监听端口

    • server的端口映射是80:80,所以主机应访问localhost:80而非localhost:8080,后者是错误的访问地址
    • 进入容器确认端口监听情况:执行docker compose exec server netstat -tulpn(若容器无netstat,可先安装apt install net-tools),查看是否有进程监听80端口;client同理执行docker compose exec client netstat -tulpn检查3000端口
  • 排查主机端口占用与防火墙

    • 检查主机端口是否被其他进程占用:Linux/macOS用lsof -i :80或lsof -i :3000,Windows用netstat -ano | findstr ":80",若被占用可修改compose的端口映射(如server改成8080:80)
    • 临时关闭主机防火墙测试(Linux执行ufw disable,Windows在防火墙设置中临时关闭),确认是否是防火墙拦截了端口

内容的提问来源于stack exchange,提问作者Taste of Leaving

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:15:46