前置说明
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 -dversion: "3"services:openresty:image: tannnn/openresty:1.19.9.1container_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命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8ports: # 映射端口- "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;}
