Docker运行Nginx,挂载配置文件和网页

前言

用Docker跑Nginx,想改网站文件、改配置,每次进容器里改太麻烦。挂载出来就方便多了。本文讲怎么挂载网页和配置文件。

一、基本运行

最简单的跑法

docker run -d --name nginx -p 80:80 nginx

问题: 网站文件和配置都在容器里,改起来不方便。

二、挂载网页目录

完整命令

docker run -d \
  --name nginx \
  -p 80:80 \
  -v /data/www:/usr/share/nginx/html \
  nginx

解释

  • 宿主机 /data/www 目录
  • 容器里 /usr/share/nginx/html 目录

这样直接在宿主机改网页文件,刷新浏览器就生效了。

测试

在宿主机创建index.html:

echo "<h1>Hello Docker Nginx</h1>" > /data/www/index.html

浏览器访问:

http://服务器IP

就能看到了。

三、挂载配置文件

1. 先从容器里拷出默认配置

docker run -d --name nginx nginx
docker cp nginx:/etc/nginx/nginx.conf /data/nginx/nginx.conf
docker cp nginx:/etc/nginx/conf.d /data/nginx/conf.d
docker rm -f nginx

2. 挂载配置文件

docker run -d \
  --name nginx \
  -p 80:80 \
  -v /data/www:/usr/share/nginx/html \
  -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /data/nginx/conf.d:/etc/nginx/conf.d \
  nginx

3. 改配置

直接在宿主机改 /data/nginx/conf.d/default.conf,改完重载:

docker exec nginx nginx -s reload

四、挂载日志

docker run -d \
  --name nginx \
  -p 80:80 \
  -v /data/www:/usr/share/nginx/html \
  -v /data/nginx/logs:/var/log/nginx \
  nginx

日志直接在宿主机看:

tail -f /data/nginx/logs/access.log

五、Docker Compose完整配置

version: '3'
services:
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /data/www:/usr/share/nginx/html
      - /data/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /data/nginx/conf.d:/etc/nginx/conf.d
      - /data/nginx/logs:/var/log/nginx

启动:

docker-compose up -d

六、常用操作

重载配置

改了配置文件后:

docker exec nginx nginx -s reload

查看日志

docker logs nginx
# 实时看
docker logs -f nginx

进容器

docker exec -it nginx sh

七、常见坑

坑1:挂载后网站403

原因: 宿主机目录权限不对。

解决:

chmod -R 755 /data/www
chown -R nginx:nginx /data/www

坑2:改了配置不生效

原因: 没重载配置。

解决:

docker exec nginx nginx -s reload

坑3:挂载文件不存在,变成目录

-v /data/nginx.conf:/etc/nginx/nginx.conf

如果 /data/nginx.conf 不存在,Docker会自动建一个叫nginx.conf的目录。

解决: 先创建文件:

touch /data/nginx.conf

坑4:端口被占用

80端口被宿主机的Nginx占了。

解决: 停掉宿主机的Nginx,或者换端口。

坑5:改了代码不生效

如果用了CDN或者浏览器缓存,强刷一下(Ctrl+F5)。

八、多站点配置

在 /data/nginx/conf.d/ 下建多个配置文件:

/data/nginx/conf.d/
├── site1.conf
├── site2.conf
└── default.conf

site1.conf:

server {
    listen 80;
    server_name site1.com;
    root /data/www/site1;
    index index.html;
}

改完重载:

docker exec nginx nginx -s reload

九、HTTPS配置

挂载证书:

docker run -d \
  --name nginx \
  -p 80:80 \
  -p 443:443 \
  -v /data/www:/usr/share/nginx/html \
  -v /data/nginx/conf.d:/etc/nginx/conf.d \
  -v /data/ssl:/etc/nginx/ssl \
  nginx

配置文件里引用证书:

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    root /data/www;
}

总结

记住:

  1. 挂载网页目录:-v /data/www:/usr/share/nginx/html
  2. 挂载配置文件:-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf
  3. 挂载日志:-v /data/nginx/logs:/var/log/nginx
  4. 改完配置重载:docker exec nginx nginx -s reload

最常用:

docker run -d --name nginx -p 80:80 \
  -v /data/www:/usr/share/nginx/html \
  -v /data/nginx/conf.d:/etc/nginx/conf.d \
  nginx

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 08:25 

Nginx安装后找不到配置文件,编译安装路径

前言

编译安装 Nginx 后,想用 nginx 命令提示 command not found,找配置文件也找不到。这是因为编译安装的 Nginx 不在系统默认 PATH 里,路径和包管理器安装的不一样。

编译安装的默认路径

一般编译安装 Nginx,默认装在:

/usr/local/nginx/

目录结构:

/usr/local/nginx/
├── sbin/
│   └── nginx          # 主程序
├── conf/
│   ├── nginx.conf     # 主配置文件
│   ├── mime.types
│   └── fastcgi_params
├── html/              # 默认网站目录
└── logs/
    ├── access.log
    └── error.log

怎么确认安装路径

方法一:nginx -V

/usr/local/nginx/sbin/nginx -V

输出里 --prefix= 后面就是安装路径。

方法二:ps 命令看进程

ps aux | grep nginx

进程路径就是 Nginx 在哪。

把 nginx 加到 PATH

不想每次都输完整路径,加个软链接:

ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

之后直接用 nginx 命令就行。

配置文件在哪

编译安装的配置文件在:

/usr/local/nginx/conf/nginx.conf

编辑:

vi /usr/local/nginx/conf/nginx.conf

常用命令

# 启动
/usr/local/nginx/sbin/nginx

# 重载
/usr/local/nginx/sbin/nginx -s reload

# 停止
/usr/local/nginx/sbin/nginx -s stop

# 检查配置
/usr/local/nginx/sbin/nginx -t

开机自启

编译安装的 Nginx 没有 systemd 服务,需要自己写:

vi /etc/systemd/system/nginx.service

内容:

[Unit]
Description=Nginx Web Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop

[Install]
WantedBy=multi-user.target

然后:

systemctl daemon-reload
systemctl enable nginx
systemctl start nginx

常见坑

坑1:nginx: command not found

执行 nginx 提示找不到命令。

原因: 编译安装的不在 PATH 里。

解决: 加软链接,或者用完整路径。

坑2:改了配置不生效

改了 /etc/nginx/nginx.conf,但重载后还是老配置。

原因: 你改的是包管理器安装的配置文件,实际跑的是编译安装的。

解决: 用 nginx -t 确认一下实际加载的是哪个配置文件。

坑3:多个 nginx 共存

系统里同时有 yum 安装的和编译安装的 Nginx,不知道哪个在跑。

解决: 先停掉一个,再看进程。

坑4:日志找不到

日志不在 /var/log/nginx/。

原因: 编译安装的日志在自己的目录里。

解决: 看 nginx.conf 里的 error_log 和 access_log 配置。

总结

编译安装 Nginx 记住三个路径:

内容 路径
主程序 /usr/local/nginx/sbin/nginx
配置文件 /usr/local/nginx/conf/nginx.conf
日志 /usr/local/nginx/logs/

记住: 编译安装的和 yum 安装的路径不一样,别搞混了。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:46 

Nginx查看配置文件位置,nginx.conf在哪

前言

刚装完 Nginx,想改个配置,发现不知道 nginx.conf 在哪。不同安装方式,配置文件位置不一样。本文讲一下怎么找 Nginx 配置文件。

方法一:nginx -t 命令

最直接的方法:

nginx -t

输出会显示配置文件路径:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

第一行就是配置文件位置。

方法二:ps 命令看进程

看 Nginx 进程启动时用的哪个配置:

ps aux | grep nginx

或者:

ps -ef | grep nginx

输出里 master 进程后面的 -c 参数就是配置文件路径。

方法三:nginx -V 看编译参数

nginx -V

输出里 --conf-path= 后面就是默认配置文件路径。

常见安装方式的默认路径

yum/apt 安装(包管理器)

/etc/nginx/nginx.conf

子配置一般在:

/etc/nginx/conf.d/
/etc/nginx/sites-available/

编译安装

默认在:

/usr/local/nginx/conf/nginx.conf

或者:

/usr/local/nginx/conf/

Docker 安装

容器里的路径是:

/etc/nginx/nginx.conf

如果挂载了宿主机目录,就在宿主机对应目录里。

常用配置文件结构

/etc/nginx/
├── nginx.conf          # 主配置文件
├── conf.d/             # 子配置目录
│   ├── aaa.conf
│   └── bbb.conf
├── fastcgi_params      # FastCGI 参数
├── mime.types          # MIME 类型
└── nginx.conf.default  # 默认配置模板

怎么查看完整配置

看主配置

vi /etc/nginx/nginx.conf

看所有加载的配置

nginx -T

-T 会打印所有配置文件的内容,包括 include 进来的子配置。

常见坑

坑1:改了配置不生效

改了 nginx.conf,但重载后还是老配置。

原因: 你改的不是 Nginx 实际加载的配置文件。

解决: 用 nginx -t 确认一下到底加载的是哪个配置文件。

坑2:找不到 nginx.conf

执行 find / -name nginx.conf 找不到。

原因: 可能是编译安装的,不在标准路径。

解决: 用 nginx -V 看 --conf-path= 参数。

坑3:conf.d 里的配置没生效

在 conf.d 里加了 .conf 文件,但没生效。

原因1: 后缀不是 .conf

原因2: 主配置里没 include conf.d/*.conf

解决: 确认 nginx.conf 里有这一行:

include /etc/nginx/conf.d/*.conf;

总结

方法 命令
最推荐 nginx -t
看进程参数 ps aux \| grep nginx
看编译参数 nginx -V
看全部配置 nginx -T

记住: 找不到配置文件先跑 nginx -t,一目了然。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-7 07:34 
'); })();