docker配置固定ip解决nginx代理容器名称dns缓存不更新问题

docker配置固定ip解决nginx代理容器名称dns缓存不更新问题

场景

在nginx配置中,proxy_pass代理项使用容器名称替代ip,容器重启后代理的url网络不通。

nginx配置示例

conf 复制代码
location /api/ {
	proxy_set_header Host $http_host;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header REMOTE-HOST $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    # 这里的iot-backend为docker容器名称
	proxy_pass http://iot-backend:8089;
}

docker dns

在docker网络中,提供有默认dns服务127.0.0.11用于容器名称和容器ip的解析转换,同时自动生成文件到容器内/etc/resolv.conf。在不指定容器ip时,每次容器重启后,容器ip会重新分配而发生变更。

nginx dns缓存

在nginx中,在第一次dns解析成功后,结果会被缓存,并不会自动更新。因此容器重启后,容易导致proxy_pass配置的基于容器名称的代理网络不通。此时需要手动重启nginx或重新加载nginx配置,触发后续网络请求进入更新dns。

使用固定ip解决重启后容器ip变更

创建容器网络,为容器配置网络,并设置固定ip。容器重启后ip不变,间接保证nginx代理url网络联通。

docker compose配置示例

yml 复制代码
# 创建容器网络,桥接模式,使用ipam固定ip
networks:
  iot-network:
    name: iot-network
    ipam:
      driver: default
      config:
        - subnet: '177.7.0.0/16'

# 为容器配置网络和固定ip
iot-backend:
    networks:
      iot-network:
        ipv4_address: 177.7.0.10

创建后可以使用docker network ls查看容器网络。

相关推荐
辉视广播对讲6 分钟前
私有协议 IP 广播对讲 vs SIP 广播对讲多维度对比分析报告
网络·网络协议·tcp/ip
wanhengidc8 分钟前
高防IP的主要功能有哪些?
运维·服务器·网络·网络协议·tcp/ip·游戏
IpdataCloud13 分钟前
摄像头OTA升级时,怎样用嵌入式IP离线库判断当地CDN节点而不拉跨省流量?
服务器·网络·tcp/ip
ai产品老杨36 分钟前
破局算力碎片化:基于K8s调度与Docker多架构镜像的GB28181/RTSP异构AI视频底座实践
docker·架构·kubernetes
雪碧聊技术37 分钟前
前端项目部署到服务器
服务器·nginx·ubuntu·前端项目部署
万象.43 分钟前
docker容器的命令和实操
docker·容器
@insist1233 小时前
软件设计师-网络层核心知识全解:广域网协议、TCP/IP 体系与 IP 地址规划
网络·网络协议·tcp/ip·软考·软件设计师·软件水平考试
bearpping9 小时前
Nginx 配置:alias 和 root 的区别
前端·javascript·nginx
Lxinccode11 小时前
docker(28) : 别名配置
docker·容器·eureka·docker别名
平生幻12 小时前
TCP协议与UDP协议的区别
网络协议·tcp/ip·udp