普通视图

发现新文章,点击刷新页面。
昨天 — 2026年2月4日首页

docker-compose k8s部署项目使用服务名称,后端服务发布后出现接口502问题

作者 litongqian
2026年2月4日 19:30

这里使用一个例子docker-compose.yml

// docker-compose.yml
# 确保所有服务在同一网络
version: '3.8'
services:
  app:
    networks:
      - mynetwork
    depends_on:
      - mysql
      - redis
  
  mysql:
    networks:
      - mynetwork
  
  redis:
    networks:
      - mynetwork
  imotor-ltq:
    image: phm-ltq:1.0.0
    container_name: imotor-ltq
    restart: always
    networks:
      - app_net
    deploy:
      resources:
        limits:
          cpus: '3.00'
          memory: 5G
        reservations:
          cpus: '3.00'
          memory: 2G
    ports:
      - "7953:8080"
spectral-ltq-web:
    image: spectral-ltq-web:1.0.0
    container_name: spectral-ltq-web
    restart: always
    networks:
      - app_net
    deploy:
      resources:
        limits:
          cpus: '1.00'
          memory: 1G
        reservations:
          cpus: '1.00'
          memory: 1G
    ports:
      - "7777:8080"
    depends_on:
      imotor-algo:
        condition: service_healthy
networks:
  mynetwork:
    driver: bridge

前端nginx 镜像容器配置:

    location /api/ {                # 使用变量强制每次解析                proxy_pass http://imotor-ltq:7953/;                proxy_set_header Host $proxy_host;                proxy_set_header X-Real-IP $remote_addr;                proxy_set_header remote_addr $remote_addr;                proxy_http_version 1.1;                proxy_connect_timeout 4s;                proxy_read_timeout 600s;                proxy_send_timeout 12s;            }

当后端开发新功能发版后偶现

发现服务不能使用了,每次出现这个问题时 都需要重启前端项目,

后面开始排查:查看docker 网络

docker network ls
docker network inspect <network_name>

多次重启后发现IP地址会发生变化,基本可以确定是使用服务名DNS解析时存在缓存
使用的是之前的服务IP地址,所以找不到

进一步确定问题:使用 docker-compose exec 前端应用 ping imotor-ltq
服务

解决方法:

server { 
         listen       8080;# 访问端口 
         server_name  localhost;
         resolver 127.0.0.11 valid=10s;  # Docker 内置 DNS
         location /api/ {
          set $algo_host imotor-algo;
          rewrite ^/api/(.*)$ /$1 break; //使用rewrite重置为后端需要的地址
          proxy_pass http://$algo_host:8080;
       }
    }

// 添加 resolver 127.0.0.11 valid=10s; # Docker 内置 DNS
使用变量

 set $algo_host imotor-algo;

rewrite ^/api/(.*)/ /1 break;

proxy_pass http://$algo_host:8080;

之前想省略  rewrite ^/api/(.*)/ /1 break;直接在后面加/

set $algo_host imotor-algo;
proxy_pass http://$algo_host:8080/;

发现找不到服务地址,不知道什么原因

❌
❌