前置说明
docker-compose
https://gitee.com/etn/docker-compose/blob/tn/tn/common/docker-compose-openresty.yml
# docker-compose -f docker-compose-openresty.yml -p openresty up -d
version: "3"
services:
openresty:
image: tannnn/openresty:1.19.9.1
container_name: nginx # 容器名为'nginx'
privileged: true
# 使用网络
network_mode: "host"
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
# - "./openresty/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf" # nginx 主配置文件(默认:include /etc/nginx/conf.d/*.conf;)(如果要自定义请打开注释)
# - "./openresty/html:/usr/local/openresty/nginx/html" # 默认页面 (如果要自定义请打开注释)
- "./openresty/logs:/usr/local/openresty/nginx/logs" # 日志
- "./openresty/pages:/usr/local/openresty/nginx/html/pages" # 自己的前端页面放进容器内的html/pags下
- "./openresty/conf/conf.d:/etc/nginx/conf.d" # nginx配置文件群 (如果要自定义请打开注释)
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
ports: # 映射端口
- "80:80"
注意
代理容器内其他容器的访问地址时的网络问题
以 portainer 为例
- 我开始使用的是默认网络。导致代理的时候不能写loaclhost/127.0.0.1 必须写容器内容IP(172.x.x.x)
容器的重启或者删除了重建,可能导致IP变动,这样做会导致nginx的配置变得不可靠
location / {
proxy_pass http://172.18.0.1:9000/;
proxy_set_header Via "nginx";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port $server_port;
}
- 在 nginx的compose中加入
network_mode: "host"
就可以规避上述问题location /portainer/ {
proxy_pass http://localhost:9000/;
proxy_set_header Via "nginx";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Port $server_port;
}