Docker容器启动后为什么访问不了本地端口?
我用 Docker 跑了一个前端开发服务器,Dockerfile 里写了 EXPOSE 3000,启动容器时也加了 -p 3000:3000,但浏览器访问 localhost:3000 就是打不开,显示连接被拒绝。
我试过在容器里 curl localhost:3000 是通的,说明服务确实跑起来了,但宿主机就是连不上。是不是端口映射哪里写错了?
我的启动命令是:docker run -p 3000:3000 my-frontend-app,Dockerfile 相关部分如下:
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
你容器里能curl通localhost:3000,但宿主机访问不了,说明服务只监听了容器内部的localhost。大多数前端开发服务器默认只监听127.0.0.1,需要改成0.0.0.0才能让外部访问。
试试修改你的npm启动命令,比如react项目的话:
或者如果是vite的话:
改完重建容器应该就能在宿主机访问了。顺便说下,EXPOSE其实可以去掉,它只是文档作用,实际端口映射全靠-p参数。