当前位置: 首页 > news >正文

做我的世界皮肤壁纸的网站工业设计软件上市公司

做我的世界皮肤壁纸的网站,工业设计软件上市公司,创建企业,建设银行个人网上银行入口docker-compose中的nginx为何突然访问不到服务了? 我使用docker-compose的方式启动了一个Nginx、服务A、服务B,nginxconfig内部是填写的服务名, 在重建服务A之后,有时就会出现服务A无法访问的问题,此时重启一下nginx就…

docker-compose中的nginx为何突然访问不到服务了?

我使用docker-compose的方式启动了一个Nginx、服务A、服务B,nginxconfig内部是填写的服务名,
在重建服务A之后,有时就会出现服务A无法访问的问题,此时重启一下nginx就可以访问到了。

场景复现准备

目录结构
docker-repro/
├── docker-compose.yml
├── nginx/
│   └── nginx.conf
└── service-a/├── Dockerfile└── app.py

1. 编写 docker-compose.yml

在根目录 docker-repro/docker-compose.yml 中写入:

version: '3.8'services:nginx:image: nginx:latestvolumes:- ./nginx/nginx.conf:/etc/nginx/nginx.conf:roports:- "8080:80"depends_on:- service_aservice_a:build: ./service-acontainer_name: service_aservice_b:image: busyboxcommand: ["sh", "-c", "while true; do echo B; sleep 5; done"]container_name: service_b
  • service_a:一个简单的 Python Flask 服务,返回 “Hello A”
  • service_b:一个不停输出字符 B 的占位容器
  • nginx:反向代理到 service_a,端口转发到本机 8080

2. 编写 Service A

docker-repro/service-a/ 下:

app.py
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return 'Hello A\n'if __name__ == '__main__':# 监听 5000 端口app.run(host='0.0.0.0', port=5000)
Dockerfile
FROM dockerpull.cn/library/python:3.9-slim
WORKDIR /app
COPY app.py /app/
RUN pip install flask  -i https://mirrors.aliyun.com/pypi/simple/
EXPOSE 5000
CMD ["python", "app.py"]

3. 编写 Nginx 配置

docker-repro/nginx/nginx.conf 中:

worker_processes  1;events {worker_connections  1024;
}http {upstream service_a {server service_a:5000;}server {listen 80;location / {proxy_pass http://service_a;}}
}

注意:这里直接在 upstream 里写了 service_a:5000,Nginx 启动时只解析一次。


4. 启动服务并验证启动成功

在项目根目录运行:

docker-compose up -d --build

待启动完成之后执行:

curl -i http://localhost:8080

问题复现

  • 先查看下目前service_a的IP
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' service_a
销毁并重新创建 Service A
docker-compose stop service_a
docker-compose rm -f service_a
docker-compose up -d service_a

如果你是这样就开始实验了,那么你大概率会发现 IP 没变,服务正常访问,本次实验就没有找出原因。
因为 Docker 的网络默认会“填补空缺”——只要那个槽位(IP)在你重建前没有被别的容器占用,
它就会再分配给新的 service_a。
想要让它真正拿到一个不同的 IP,你需要“先占坑”。

正确复现的做法是:

docker-compose stop service_a
docker-compose rm -f service_a# 使用一个临时的容器占坑
docker run -d --name dummy --network docker-repro_default busybox sleep 3600docker-compose up -d service_a

这样你再次执行查看ip命令就能发现,IP变了,服务访问不到了,问题复现出来了。

总结以下问题的核心:
Nginx 默认只解析服务名一次,DNS 结果缓存不变。
Docker 中服务 A 重建后 IP 会变,但 Nginx 仍然访问旧 IP,导致连接失败。

解决方案

解决方案有很多,在这里使用较为简单的一种方式,仅需要修改nginx配置文件。

worker_processes  1;events {worker_connections  1024;
}http {resolver 127.0.0.11 valid=5s;server {listen 80;location / {set $backend "service_a:5000";proxy_pass http://$backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
配置项作用
resolver 127.0.0.11使用 Docker 内置 DNS 进行域名解析
valid=5sDNS 记录最多缓存 5 秒,之后会重新解析
set $backend动态构造代理地址,触发每次请求前的 DNS 查询
proxy_pass http://$backend代理到动态地址
proxy_set_header添加常用的请求头,方便后端服务识别请求来源
http://www.dtcms.com/a/491793.html

相关文章:

  • 网站备案模板自己做的网站可以发布吗
  • vue-easy-tree树状结构
  • 重庆网站设计公司小白测评做网站
  • 可以发布广告的网站农村网站建设补助
  • 哪个网站做的简历最好专业网站设计力荐亿企邦
  • 轻量云服务器Lighthouse × 1Panel Halo 开启创意新玩法,建站与服务部署全攻略
  • 亦庄附近的网站建设公司关键词排名怎么查
  • 做网站建设的利润南宁做企业网站
  • 群体稳定性指标PSI:机器学习模型稳定性评估的核心工具
  • **标题:发散创新:探索自愈系统的设计与实现**引言:随着计算机技术的飞速发展,软件系统的可靠性和稳定性问题愈发受到关注。本文将
  • 常驻服务问答
  • 龙岩建网站公司手机网站建设公司
  • Flink性能调优基石:资源配置与内存优化实践
  • h5页面制作流程抖音seo搜索优化
  • 自己动手做网站公司网页网站建设ppt模板
  • 图片渐变透明,图片透明渐变,图片怎么渐变透明,颜色渐变透明,颜色透明渐变,怎么让图片渐变透明,图片边缘渐变透明,图片渐变半透明
  • 数据产品(3)-数据中台
  • STM32理论 —— 存储、中断
  • 如何选择做网站软件制作
  • 营销型网站建设广州搭建 网站 模版
  • 在NumPy中合并两个一维数组的多种方法
  • 如何求「加减 value 任意次后的最大 MEX」同余类求解
  • 『 数据库 』MySQL复习 - MySQL表CRUD操作全解析
  • 规范门户网站建设虚拟主机可以干什么
  • 完整博客教程:使用Lamini和Hugging Face进行大语言模型微调
  • HandlerThread是什么?为什么它会存在?
  • LeetCode 面试经典 150_栈_有效的括号(52_20_C++_简单)(栈+哈希表)
  • Wine 10.15 发布!Linux 跑 Windows 应用更丝滑了
  • 国外家居设计网站温州建设信息网站
  • PT2000 Dev Studio产生的微码解析一-微核简介