在Docker中部署Nginx时,挂载数据卷(Volume)可以让你: - 持久化Nginx配置和日志文件 - 方便地修改配置而不需要重建容器 - 保持数据独立于容器生命周期
mkdir -p ~/nginx-docker/{conf,html,logs}
如果你需要从Nginx容器中提取默认配置:
docker run --name tmp-nginx -d nginx
docker cp tmp-nginx:/etc/nginx/nginx.conf ~/nginx-docker/conf/
docker cp tmp-nginx:/etc/nginx/conf.d ~/nginx-docker/conf/
docker rm -f tmp-nginx
在~/nginx-docker/conf/conf.d
目录下创建你的网站配置,例如default.conf
:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
echo "<h1>Welcome to Nginx on Docker</h1>" > ~/nginx-docker/html/index.html
docker run -d \
--name my-nginx \
-p 80:80 \
-v ~/nginx-docker/html:/usr/share/nginx/html \
-v ~/nginx-docker/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/nginx-docker/conf/conf.d:/etc/nginx/conf.d \
-v ~/nginx-docker/logs:/var/log/nginx \
nginx
curl http://localhost
或者在浏览器中访问http://localhost
,你应该能看到之前创建的HTML内容。
# 创建命名卷
docker volume create nginx-html
docker volume create nginx-conf
docker volume create nginx-logs
# 运行容器
docker run -d \
--name my-nginx \
-p 80:80 \
-v nginx-html:/usr/share/nginx/html \
-v nginx-conf:/etc/nginx \
-v nginx-logs:/var/log/nginx \
nginx
如果你不希望容器修改配置,可以添加:ro
标志:
-v ~/nginx-docker/conf/nginx.conf:/etc/nginx/nginx.conf:ro
创建docker-compose.yml
文件:
version: '3'
services:
nginx:
image: nginx
ports:
- "80:80"
volumes:
- ./nginx-docker/html:/usr/share/nginx/html
- ./nginx-docker/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx-docker/conf/conf.d:/etc/nginx/conf.d
- ./nginx-docker/logs:/var/log/nginx
然后运行:
docker-compose up -d
权限问题:
--user
参数:
bash
docker run --user $(id -u):$(id -g) ...
配置修改后不生效:
bash
docker exec my-nginx nginx -s reload
查看日志:
docker logs my-nginx
# 或者直接查看挂载的日志文件
tail -f ~/nginx-docker/logs/error.log
通过这种方式部署Nginx,你可以轻松管理配置和内容,同时保持容器本身的轻量级特性。