在Docker容器中运行Nginx的详细教程
作者:不惑_
前言
Nginx 是一款高性能 Web 服务器,常被用作反向代理、负载均衡器以及内容缓存。它以高效与灵活著称,是提供静态文件服务、流量管理和提升应用速度的首选解决方案。而当你将 Nginx 运行在 Docker 容器中时,还能进一步获得可移植性、快速部署和更整洁的管理体验。
本教程将带你从零开始学习如何使用 Docker 部署 Nginx。内容包括:
- 拉取官方镜像
- 在 Docker 容器中运行 Nginx
- 映射端口并访问服务
- 使用自定义配置文件和 HTML 内容
- 管理容器
- 使用 Docker Compose 管理多容器环境
完成后,你将能够以快速、干净、可重复的方式运行属于你自己的 Nginx 服务。
一、运行 Nginx 所需的前提条件
在开始之前,请确保具备以下条件:
- 拥有 VPS 主机访问权限
如果你还没有,可以考虑 云厂商 等提供的 VPS 托管方案。 - 服务器上已安装 Docker
- 熟悉基本的 Docker 命令
- 已安装 Docker Compose(用于高级配置)
重要提示
Docker 命令通常需要 sudo 权限。
你可以将当前用户添加到 Docker 用户组以免每次都输入 sudo。
本教程中为简洁起见省略了 sudo,你可根据实际环境调整。
二、拉取 Nginx 官方 Docker 镜像
要启动 Nginx,首先需要从 Docker Hub 拉取官方镜像:
docker pull nginx
该命令会获取最新的稳定版 Nginx 镜像。推荐始终使用官方镜像,因为它由 Nginx 团队维护,更新及时且无冗余内容。
下载完成后,运行以下命令验证镜像是否存在:
docker images
在输出结果的“REPOSITORY”列中查找 nginx 即可确认。

三、以分离模式运行 Nginx 容器
有了镜像后,可以启动一个名为 nginx-server 的容器:
docker run -d --name nginx-server -p 80:80 nginx
命令说明:
-d:让容器在后台运行(Detached 模式)--name:为容器命名-p 80:80:将主机的 80 端口映射到容器的 80 端口
Detached 模式意味着容器在后台持续运行,不占用当前终端,非常适合 Nginx 这类长期运行的服务。
验证容器运行状态:
docker ps

然后在本地测试访问:
curl http://localhost:80
成功后,你将看到 Nginx 默认欢迎页:

四、端口映射与访问控制
默认情况下,Nginx 在容器内部监听 80 端口。
使用 -p 参数可以指定主机与容器端口的映射:
docker run -d --name nginx-alt -p 8080:80 nginx
这样,外部访问 http://localhost:8080 即可访问容器内部的 80 端口。
如果出现“port already allocated”错误,说明端口被占用,可以使用 lsof -i :80 或 netstat 检查端口使用情况。

五、自定义 Nginx 配置文件
你可以通过挂载自定义配置文件来实现反向代理、缓存、SSL 或其他高级功能。
创建配置文件:
nano nginx.conf
示例配置(将请求代理到 http://127.0.0.1:3000):
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
运行带自定义配置的容器:
docker run -d --name nginx-reverse-proxy \ -p 8080:80 \ -v /full/path/to/nginx.conf:/etc/nginx/nginx.conf:ro \ nginx
-v 参数挂载本地配置文件到容器内,并设置只读模式(:ro)。
测试代理是否生效:
curl http://localhost:8080
若需修改配置,修改文件后执行:
docker restart nginx-reverse-proxy
六、挂载静态网站内容
Nginx 最常见的用途之一是托管静态网页。
只需将本地网站目录挂载到容器内:
docker run -d --name nginx-static \ -p 8080:80 \ -v /path/to/site:/usr/share/nginx/html:ro \ nginx
这样,Nginx 会自动从 /usr/share/nginx/html 提供内容。默认配置支持 HTML、CSS、JS、图片等基础类型。
若需重定向、自定义缓存规则或访问控制,可再定义自有 nginx.conf。
七、管理 Nginx 容器
常用命令如下:
停止容器
docker stop nginx-server
启动容器
docker start nginx-server
重启容器
docker restart nginx-server
查看日志
docker logs nginx-server
删除容器
docker stop nginx-server docker rm nginx-server
保持环境整洁有助于避免端口冲突和资源浪费。

八、使用 Docker Compose 管理 Nginx
当项目包含多个容器时,Docker Compose 可以让部署更简单。
创建 docker-compose.yml 文件:
version: '3'
services:
nginx:
image: nginx
container_name: nginx-compose
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
在同一目录下执行:
docker-compose up -d
停止并清理:
docker-compose down
九、多服务协同部署(Nginx + 后端)
Docker Compose 也可以同时运行前后端服务,例如 Node.js + Nginx。
示例 docker-compose.yml:
version: '3'
services:
backend:
build: ./backend
container_name: node-app
ports:
- "3000:3000"
networks:
- app-network
nginx:
image: nginx
container_name: nginx-proxy
ports:
- "8080:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- backend
networks:
- app-network
networks:
app-network:
这样,Nginx 将通过网络连接到后端容器,实现流量转发。
结语
至此,你已经学会如何:
- 从官方镜像运行 Nginx
- 使用自定义配置或静态资源
- 管理容器生命周期
- 通过 Docker Compose 构建多服务架构
Nginx + Docker 的组合能让部署更高效、环境更干净、迁移更方便。无论是搭建个人网站还是构建复杂微服务体系,这都是最稳妥的起点。
以上就是在Docker容器中运行Nginx的详细教程的详细内容,更多关于Docker运行Nginx的资料请关注脚本之家其它相关文章!
