Docker部署Node.js项目:用 Docker 部署
用 Docker 部署 Node.js 项目,零基础也能轻松上线
很多新手听到“容器化部署”会觉得很难,其实只要掌握几个核心步骤,用 Docker 部署 Node.js 项目比传统方式更省心——不用再纠结环境差异、依赖冲突,一条命令就能跑起来。
本文会从最基础的概念开始,带你走完一个完整的部署流程。
1. 你需要准备的东西
在动手之前,确保你的服务器(或本地电脑)上已经安装了 Docker。
如果你还没装,可以到 Docker 官网 下载对应版本,或者用一行命令安装(以 Ubuntu 为例):
sudo apt update && sudo apt install docker.io -y安装完成后运行 docker --version,看到版本号就说明成功了。
另外你还需要一个已经写好的 Node.js 项目,里面至少要包含 package.json 和入口文件(比如 app.js 或 index.js)。
2. 在项目根目录创建 Dockerfile
Dockerfile 就是一个“说明书”,告诉 Docker 怎么构建你的项目环境。
在项目根目录下新建一个名为 Dockerfile 的文件(注意大小写,没有后缀)。
写入以下内容:
# 使用官方 Node.js 20 镜像作为基础
FROM node:20-alpine
设置容器内的工作目录
WORKDIR /app
把 package.json 和 package-lock.json 复制到容器中
COPY package*.json ./
安装项目依赖
RUN npm install --production
把整个项目复制到容器中
COPY . .
暴露项目运行的端口(以 3000 为例)
EXPOSE 3000
启动命令
CMD ["node", "app.js"]
注意: 如果你的入口文件不是 app.js,记得把最后一行改成对应的文件名。
3. 构建镜像与启动容器
在项目目录下打开终端,执行下面两个关键命令:
# 构建镜像,-t 表示给镜像起个名字,后面的点表示当前目录
sudo docker build -t my-node-app .
启动容器,-d 后台运行,-p 把宿主机 3000 端口映射到容器 3000 端口
sudo docker run -d -p 3000:3000 --name my-running-app my-node-app
构建过程可能需要几十秒,看到 Successfully built 就表示镜像创建成功。
运行后,用 sudo docker ps 查看容器状态,如果 STATUS 显示 Up 就说明容器已经起来了。
4. 验证项目是否正常
在浏览器里访问 http://你的服务器IP:3000(如果是本地就访问 http://localhost:3000),如果能正常显示你的 Node.js 页面,说明部署成功。
如果想看实时日志(比如调试接口),可以用:
sudo docker logs -f my-running-app按 Ctrl+C 退出日志查看。
5. 避坑指南与高频问题
问题 1:端口被占用怎么办?
修改 -p 参数,比如把宿主机的 3000 改成 3001:-p 3001:3000,然后访问 3001 端口。
问题 2:容器启动了但访问不到?
先检查防火墙是否放行了对应端口,再用 sudo docker exec -it my-running-app sh 进入容器内部,运行 curl http://localhost:3000 确认项目在工作。如果项目依赖数据库(比如 MongoDB),要确保数据库链接地址在容器内能访问(不要用 localhost,改成宿主机 IP 或容器网络名)。
问题 3:每次修改代码都要重新构建吗?
开发阶段你可以用 挂载卷 的方式实时同步代码:
sudo docker run -d -p 3000:3000 -v $(pwd):/app --name my-dev-app my-node-app这样本地改代码,容器内会自动更新(需要你的 Node.js 支持热重载)。
---
如果你正在处理 Docker 部署 Node.js 项目,建议先按本文步骤完整执行一次,遇到异常时优先回头看“避坑指南”部分。
等你跑通第一个容器后,再研究多容器编排(比如 Docker Compose)就会容易得多。
小提醒:生产环境建议使用pm2或nodemon管理进程,并搭配.dockerignore文件忽略node_modules和.git等不必要的文件,让构建更快、镜像更小。