docker-compose k8s部署项目使用服务名称,后端服务发布后出现接口502问题
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/;
发现找不到服务地址,不知道什么原因