在 docker 中挂载自定义 nginx 配置应优先挂载 /etc/nginx/conf.d 目录,保留默认 nginx.conf;需创建宿主机 conf.d、html、logs 目录,复制并修改 default.conf,再通过 -v 参数映射路径启动容器,修改后可用 nginx -s reload 热重载。

在 Docker 中挂载自定义 Nginx 配置,核心是让容器启动时读取宿主机上的配置文件,而不是使用镜像内置的默认配置。关键在于路径映射准确、结构匹配、且避免覆盖关键目录导致启动失败。
明确挂载目标路径
Docker 官方 Nginx 镜像默认加载 /etc/nginx/nginx.conf 作为主配置文件,该文件中已包含 include /etc/nginx/conf.d/*.conf;。因此有两种常用方式:
-
只挂载主配置文件:用宿主机的
nginx.conf完全覆盖容器内的/etc/nginx/nginx.conf -
挂载 conf.d 目录(推荐):保留原
nginx.conf不变,仅挂载/etc/nginx/conf.d,把自定义站点配置(如myapp.conf)放进去——更安全、更符合生产习惯
准备宿主机配置目录
先创建清晰的本地目录结构,例如:
mkdir -p ~/nginx/conf.d<br>mkdir -p ~/nginx/html<br>mkdir -p ~/nginx/logs
然后获取默认配置作基础(避免从零手写出错):
- 运行临时容器:
docker run --name tmp-nginx -d nginx - 复制默认配置:
docker cp tmp-nginx:/etc/nginx/conf.d/default.conf ~/nginx/conf.d/ - 清理临时容器:
docker rm -f tmp-nginx
编辑 ~/nginx/conf.d/default.conf,按需修改 server_name、root、location 等项。
启动容器并正确挂载
使用 -v 参数绑定宿主机路径到容器内对应位置:
docker run -d \<br> --name my-nginx \<br> -p 80:80 \<br> -v ~/nginx/conf.d:/etc/nginx/conf.d \<br> -v ~/nginx/html:/usr/share/nginx/html \<br> -v ~/nginx/logs:/var/log/nginx \<br> nginx
注意:
- 不要直接挂载整个
/etc/nginx目录,否则可能覆盖mime.types或nginx.conf中依赖的其他文件,引发 500 错误 - 若挂载单个
nginx.conf文件,命令中路径必须精确到文件级:-v ~/nginx/nginx.conf:/etc/nginx/nginx.conf - 挂载后容器内
/etc/nginx/conf.d内容完全由宿主机目录决定,原有default.conf将被替换
验证与热重载配置
容器启动后,访问 http://localhost 查看是否生效。若修改了配置文件,无需重启容器:
- 进入容器执行重载:
docker exec my-nginx nginx -s reload - 或向容器发送信号:
docker kill -s HUP my-nginx
如果容器启动失败(docker ps -a 显示 Exited),大概率是 nginx.conf 语法错误,可用 docker logs my-nginx 查看报错详情,再用 nginx -t -c /path/to/nginx.conf 在宿主机上提前校验语法。











