Docker与Docker Compose部署Nginx完整教程(含报错排查)
Nginx是一款高性能的HTTP和反向代理服务器,在实际项目部署中应用广泛。本文将详细介绍两种常用的Nginx部署方式——Docker手动部署和Docker Compose部署,同时针对部署过程中可能出现的访问报错,给出具体的排查和解决方法,适合新手快速上手实践。
一、部署前准备
在开始部署前,请确保你的服务器已安装Docker(若使用Docker Compose部署,还需安装Docker Compose)。可通过以下命令检查安装状态:
# 检查Docker版本
docker -v
# 检查Docker Compose版本(若使用)
docker-compose -v若未安装,请先完成Docker及Docker Compose的安装,再进行后续操作。
二、Docker手动部署Nginx
手动部署方式步骤清晰,适合初学者了解Nginx容器的运行逻辑,核心分为“获取默认配置”“创建容器”“访问测试”三个步骤。
步骤1:启动临时容器,获取Nginx默认配置
Nginx官方镜像包含默认的配置文件,我们可以通过启动一个临时容器,将默认配置复制到宿主机,方便后续自定义修改。执行以下命令:
# 1. 在宿主机创建Nginx相关目录(用于挂载容器内的配置、网页和日志)
mkdir -p /data/nginx/{html,conf,logs}
# 说明:-p 参数确保递归创建目录,避免因父目录不存在报错;html存放网页文件,conf存放配置文件,logs存放日志
# 2. 启动临时Nginx容器(命名为temp-nginx,后台运行)
docker run --name temp-nginx -d nginx
# 说明:--name 指定容器名称,-d 表示后台运行,nginx是使用的官方镜像
# 3. 将容器内的默认配置复制到宿主机创建的目录中
docker cp temp-nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
docker cp temp-nginx:/etc/nginx/conf.d /data/nginx/conf/conf.d
docker cp temp-nginx:/usr/share/nginx/html /data/nginx/
# 说明:docker cp 命令用于容器与宿主机之间复制文件,格式为「docker cp 容器名:容器内路径 宿主机路径」
# 4. 临时容器完成使命,停止并删除
docker stop temp-nginx && docker rm temp-nginx
# 说明:&& 表示前一条命令执行成功后,再执行后一条命令;stop停止容器,rm删除容器步骤2:创建正式Nginx容器
通过挂载宿主机目录的方式创建正式容器,这样后续修改配置、存放网页、查看日志都可以直接在宿主机操作,无需进入容器内部。执行命令:
docker run -d -p 8080:80 -p 8443:443 --name nginx \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/nginx/logs:/var/log/nginx \
--restart=always
# 命令参数详解:
# -d:后台运行容器
# -p 8080:80:将宿主机8080端口映射到容器80端口(HTTP端口)
# -p 8443:443:将宿主机8443端口映射到容器443端口(HTTPS端口,后续可配置SSL证书)
# --name nginx:给容器命名为nginx,方便后续管理(如启动、停止)
# -v:挂载宿主机目录到容器对应目录,实现数据持久化(宿主机修改后,容器内同步生效)
# --restart=always:容器退出后自动重启,保障服务稳定性步骤3:访问测试
容器创建成功后,可通过宿主机IP或127.0.0.1(本地测试)访问Nginx服务,测试命令(或直接在浏览器访问):
http://127.0.0.1:8080### 常见访问报错排查(重点!)
若访问时出现报错:“URL拼写可能存在错误,请检查”,大概率是以下3种原因,按优先级排查:
URL拼写错误:检查访问地址是否正确,确保端口号是8080(对应步骤2中映射的宿主机端口),避免多打空格、错写端口(如写成80、8888等)。
容器未正常运行:执行
docker ps命令,查看nginx容器是否在运行。若未运行,执行docker start nginx启动;若启动失败,执行docker logs nginx查看日志,排查配置文件错误或端口占用问题。端口占用:宿主机8080端口可能被其他服务占用,导致Nginx容器无法正常监听。执行
netstat \-tuln \| grep 8080查看端口占用情况,停止占用端口的服务,或修改步骤2中的端口映射(如将8080改为8081),重新创建容器。
排查完成后,重新访问上述地址,若出现Nginx默认欢迎页面,说明手动部署成功。
三、Docker Compose部署Nginx
对于需要长期维护、多容器协同的场景,Docker Compose部署更简洁高效,只需编写一个yaml配置文件,即可一键启动、停止服务。
步骤1:编写docker-compose.yaml配置文件
在宿主机任意目录(如/home/docker/nginx)创建docker-compose.yaml文件,内容如下(可直接复制使用,需根据实际需求修改路径和端口):
# version: '3.0' # 指定 docker-compose 语法版本(可选,不指定则使用默认版本)
services:
nginx:
image: nginx:latest # 使用最新版Nginx官方镜像(也可指定具体版本,如nginx:1.25)
container_name: nginx-web # 容器名称,自定义即可
ports:
- "80:80" # HTTP 端口映射(宿主机80端口映射到容器80端口,可直接通过IP访问,无需加端口)
- "443:443" # HTTPS 端口映射(后续配置SSL证书后使用)
volumes:
# 挂载网页目录(宿主机路径可自定义,建议与手动部署保持一致,方便管理)
- /data/nginx/html:/usr/share/nginx/html
# 挂载主配置文件
- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
# 挂载子配置目录(用于配置虚拟主机等)
- /data/nginx/conf/conf.d:/etc/nginx/conf.d
# 挂载日志目录
- /data/nginx/logs:/var/log/nginx
restart: always # 容器退出后自动重启,保障服务可用性步骤2:启动Nginx服务
进入docker-compose.yaml文件所在目录,执行以下命令启动服务:
# 启动服务(后台运行)
docker-compose up -d
# 停止服务(如需)
# docker-compose down
# 重启服务(如需)
# docker-compose restart步骤3:访问测试
由于配置文件中映射了宿主机80端口,直接访问宿主机IP即可(无需加端口):http://你的服务器IP,出现Nginx默认欢迎页面即部署成功。
四、两种部署方式对比
| 部署方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Docker手动部署 | 步骤清晰,便于理解容器运行逻辑,灵活调整参数 | 命令较多,后续维护需手动操作容器 | 新手学习、临时测试、简单场景部署 |
| Docker Compose部署 | 配置集中,一键启停,便于长期维护和多容器协同 | 需编写yaml配置文件,对新手有一定门槛 | 生产环境、长期运行、多容器部署场景 |