docker-compose 内置dns 均衡负载无效?

配置如下

version: "3"
services:
  web:
    image: demo:0.0.4-SNAPSHOT
    ports:
      - "8080"
  nginx:
    image: nginx:latest
    volumes:
      - "./default.conf:/etc/nginx/conf.d/default.conf"
    ports:
      - "8081:80"
networks:
  default:
    driver: bridge
    name: test-dns=balance

nginx default.conf

  location / {
      proxy_pass http://web:8080;
  }

启动命令
docker-compose up -d --scale web=3
使用测压工具进行访问
autocannon http://192.168.110.195:8081/ -c 20
log 输出
image.png
看日志好像流量没有走其他的副本,是我配置有问题么?

阅读 3.3k
1 个回答

这里 nginx 会缓存DNS查询的记录,第一次解析出来的IP,后续的请求会一直使用这个IP去访问后端。所以才能看到流量没有走其他副本。

如果在容器内多执行几次 curl -v web:8080 ,应该能看到每次请求的目标IP都不一样。

===

虽然下面这样可以,但是应该不是最佳做法。

  location / {
    resolver 127.0.0.11 valid=0s; #设置dns服务器,缓存时间改为0s
    set $backend http://web:8080;
    proxy_pass $backend;
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题