在 Docker 中挂载 Nginx 目录主要有两种方式:使用 -v
或 --mount
参数进行目录挂载。以下是详细说明:
-v
参数(简写方式)docker run -d -p 80:80 \
-v /宿主机/nginx/conf:/etc/nginx \
-v /宿主机/nginx/logs:/var/log/nginx \
-v /宿主机/nginx/html:/usr/share/nginx/html \
--name mynginx nginx
--mount
参数(推荐方式)docker run -d -p 80:80 \
--mount type=bind,source=/宿主机/nginx/conf,target=/etc/nginx \
--mount type=bind,source=/宿主机/nginx/logs,target=/var/log/nginx \
--mount type=bind,source=/宿主机/nginx/html,target=/usr/share/nginx/html \
--name mynginx nginx
容器内路径 | 说明 |
---|---|
/etc/nginx |
Nginx 配置文件目录 |
/var/log/nginx |
Nginx 日志文件目录 |
/usr/share/nginx/html |
默认网站根目录 |
/etc/nginx/nginx.conf |
主配置文件 |
/etc/nginx/conf.d |
额外配置文件目录 |
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- /宿主机/nginx/conf:/etc/nginx
- /宿主机/nginx/logs:/var/log/nginx
- /宿主机/nginx/html:/usr/share/nginx/html
restart: always
权限问题:确保宿主机目录有适当权限,Nginx 容器默认以 nginx
用户运行
chmod -R 755 /宿主机/nginx
首次挂载:如果宿主机目录为空,Docker 会将容器内目录内容复制到宿主机目录
配置文件修改后:需要重启或重载 Nginx 使配置生效
docker exec mynginx nginx -s reload
SELinux:如果启用了 SELinux,可能需要添加 :z
或 :Z
后缀
-v /宿主机/nginx/conf:/etc/nginx:ro,z
只读挂载:对于配置文件目录,可以设置为只读挂载提高安全性
-v /宿主机/nginx/conf:/etc/nginx:ro
# 创建宿主机目录结构
mkdir -p ~/nginx/{conf,logs,html}
# 首次运行复制默认配置
docker run --rm nginx tar -cC /etc/nginx . | tar -xC ~/nginx/conf
# 运行容器并挂载
docker run -d -p 80:80 \
-v ~/nginx/conf:/etc/nginx \
-v ~/nginx/logs:/var/log/nginx \
-v ~/nginx/html:/usr/share/nginx/html \
--name mynginx nginx
通过以上方法,您可以灵活地将 Nginx 容器的重要目录挂载到宿主机,方便配置管理和数据持久化。