Docker 中启动 Nginx 容器
文章目录
- 1. 快速运行 Nginx 容器
- 从 Docker Hub 拉取官方镜像并运行:
- 验证访问:
- 2. 挂载自定义配置和静态文件
- 步骤:
- 3. 常用操作命令
- 4. 生产环境建议
- 使用 Docker Compose
- 关键优化:
- 5. 调试技巧
- 6. 常见问题解决
1. 快速运行 Nginx 容器
从 Docker Hub 拉取官方镜像并运行:
# 拉取最新版 Nginx 镜像
docker pull nginx
# 运行临时容器(测试用,退出后删除)
docker run --rm -d -p 8080:80 --name my-nginx nginx
- 参数说明:
-p 8080:80
:将宿主机的 8080 端口映射到容器的 80 端口。--name my-nginx
:为容器指定名称。--rm
:容器停止后自动删除(测试时常用)。
验证访问:
打开浏览器访问 http://xxxxxxx:8080
,看到 Nginx 欢迎页即成功。
通过 ip a
,查看 ip 地址:
2. 挂载自定义配置和静态文件
步骤:
- 创建本地目录存放配置和网页文件:
# 递归生成多个子目录:conf 和 html mkdir -p ~/nginx-demo/{conf,html}
- 生成默认配置(可选):
docker run --rm nginx cat /etc/nginx/nginx.conf > ~/nginx-demo/conf/nginx.conf docker run --rm nginx cat /etc/nginx/mime.types > ~/nginx-demo/conf/mime.types
- 添加自定义配置:
echo "server {listen 80;root /usr/share/nginx/html;location / {index index.html;} }" > ~/nginx-demo/conf/default.conf
- 创建测试页面:
echo "<h1>Hello Docker Nginx!</h1>" > ~/nginx-demo/html/index.html
- 运行容器并挂载目录:
docker run -d -p 8080:80 \-v ~/nginx-demo/html:/usr/share/nginx/html \-v ~/nginx-demo/conf:/etc/nginx--name my-nginx nginx
3. 常用操作命令
操作 | 命令 |
---|---|
查看容器日志 | docker logs my-nginx |
进入容器终端 | docker exec -it my-nginx /bin/bash |
停止容器 | docker stop my-nginx |
重启容器 | docker restart my-nginx |
删除容器 | docker rm -f my-nginx |
查看运行中的容器 | docker ps |
4. 生产环境建议
使用 Docker Compose
创建 docker-compose.yml
文件:
version: '3'
services:nginx:image: nginx:latestports:- "80:80"- "443:443"volumes:- ./html:/usr/share/nginx/html- ./conf:/etc/nginx/conf.d- ./logs:/var/log/nginxrestart: always
运行:
docker-compose up -d
关键优化:
- 版本固定:使用
nginx:1.25-alpine
等具体版本标签,避免更新冲突。 - 资源限制:
deploy:resources:limits:cpus: '0.5'memory: 512M
- 网络配置:自定义网络提升安全性:
docker network create nginx-net docker run -d --network=nginx-net nginx
5. 调试技巧
- 检查配置语法:
docker exec my-nginx nginx -t
- 热重载配置(不重启容器):
docker exec my-nginx nginx -s reload
- 查看默认配置路径:
docker exec my-nginx ls /etc/nginx/conf.d
6. 常见问题解决
- 权限问题:
若挂载文件报错,尝试添加:ro
(只读)或调整宿主机文件权限:chmod -R 755 ~/nginx-demo
- 端口冲突:
修改宿主机端口映射(如-p 8081:80
)。 - 缓存问题:
强制更新镜像:docker pull nginx:latest