首先运行一次容器,拷贝出配置文件,然后第二次正式运行容器,配置挂载目录;配置容器的反向代理需要注意代理ip应该是容器的ip而非服务器ip。
一、Docker安装Nginx并挂载配置文件
- 下载Nginx镜像
docker pull nginx:<version>
- 先运行一次容器(为了拷贝配置文件)
docker run -p 80:80 --name nginx \
-v ~/nginx/html:/usr/share/nginx/html \
-v ~/nginx/logs:/var/log/nginx \
-d nginx:<version>
- 将容器内配置文件拷贝到宿主机中
docker container cp nginx:/etc/nginx ~/nginx/
- 修改文件名称
mv nginx conf
- 终止并删除容器
docker stop nginx
docker rm nginx
- 使用下面命令启动Nginx容器,挂载目录
docker run -p 80:80 --name nginx \
-v ~/nginx/html:/usr/share/nginx/html \
-v ~/nginx/logs:/var/log/nginx \
-v ~/nginx/conf:/etc/nginx \
-d nginx:<version>
- 设置自动启动
docker update --restart=always nginx
二、配置Nginx反向代理其他容器
- 启动需要反向代理的容器
docker start <container>
- 获取该容器的ip地址
docker inspect <container>
- 查看IPAddress
- 修改Nginx配置文件
- 重启Nginx容器
docker stop nginx
docker start nginx
三、改进
之前第二步中配置Nginx反向代理其他容器使用的方式是查看容器ip,在配置文件中写死。发现此方法存在问题,当容器重启后ip会发生变化,使得配置失效,因此采用如下方法改进:
- 新增自定义docker网桥
docker network create -d bridge network-name
- 将启动后需要代理的容器和nginx容器连接到该网桥上
docker network connect network-name container-name
- 将配置文件中的ip用容器名代替
- 重新载入配置文件
# 进入nginx容器
docker exec -it nginx /bin/bash
# 重新载入配置文件
nginx -s reload
参考文章: mall在Linux环境下的部署(基于Docker容器)、 Docker教程:使用Docker容器运行Nginx并实现反向代理
评论区