惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
WordPress大学
WordPress大学
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
D
Docker
小众软件
小众软件
阮一峰的网络日志
阮一峰的网络日志
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
U
Unit 42
M
MIT News - Artificial intelligence
B
Blog
GbyAI
GbyAI
C
Check Point Blog
P
Proofpoint News Feed
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
雷峰网
雷峰网
IT之家
IT之家
Google DeepMind News
Google DeepMind News
V
V2EX
Stack Overflow Blog
Stack Overflow Blog

博客园 - Hey,Coder!

微信小程序 web方案实现调音器功能 systemctl slice配置docker最大占用cpu 内存 pipenv环境变量配置 .net8验证码 数据库差异对比工具 docker部署prometheus grafana pgexporter Alertmanager ubuntu24 换源 ssh配置 ubuntu24 Harbor部署 ubuntu24 kvm部署 cockpit web管理界面 .net api代理 Ubuntu 24.04 DMAR IOMMU 报错修复 uniapp iOS App 上架 vs文件软链接 Docker 网络别名 .net8通用中间件处理公共返回值结构 .net环境下OpenTelemetry Body 读取注意事项 jaeger界面显示异常 .net opentelemetry collector jaeger c# opentelemetry 自定义export c# opentelemetry 自定义export c# 生成对象的初始化代码 Elasticsearch ILM 与 Data Stream 概念及实例说明文档 portainer httphelper封装 Ocelot + Consul + SignalR 粘性会话 正交软件架构 docker postgresql17 主从复制 rabbitmq总结与c#示例 docker rabbitmq quartz dashboard
docker consul registrator 服务自动注册consul 微服务动态扩容
Hey,Coder! · 2026-06-02 · via 博客园 - Hey,Coder!

背景

使用consul做服务发现需要服务将ip、端口注册到consul中,规模较小的微服务可以通过配置来维护,但是一旦规模过大或者需要动态扩容时固定的ip、端口就无法使用了。
可以通过registrator这个服务来自动监控docker中的容器,将识别到的ip和端口注册到consul中,这样就可以自适应扩容后的微服务了。

network

sudo docker network create consul-net

consul

sudo docker run -d \
    --name consul \
    --network consul-net \
    -p 8500:8500 \
    consul:latest agent -server -bootstrap-expect=1 -ui -client=0.0.0.0

registrator

# 注意标签是master不是latest
sudo docker pull gliderlabs/registrator:master

sudo docker run -d \
    --name registrator \
    --network consul-net \
    --volume=/var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:master \
    -internal consul://consul:8500

# 可以指定绑定的ip而不是使用internal局域网模式
sudo docker run -d \
    --name registrator \
    --network consul-net \
    --volume=/var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:master \
    -internal=false -ip=192.168.1.1 consul://consul:8500

测试服务

sudo docker run -d \
    --name my-web-app \
    --network consul-net \
    -p 8080:80 \
    --label "SERVICE_NAME=my-web-service" \
    --label "SERVICE_TAGS=web,production" \
    nginx:alpine

# 可以让docker自动分配随机端口
# 只指定容器内的80端口,或直接-P(大写的P) 不带额外的参数将所有端口都暴露出来并随机分配
sudo docker run -d \
    --name my-web-app \
    --network consul-net \
    -p 80 \
    --label "SERVICE_NAME=my-web-service" \
    --label "SERVICE_TAGS=web,production" \
    nginx:alpine

sudo docker run -d \
    --name my-web-app \
    --network consul-net \
    -P \
    --label "SERVICE_NAME=my-web-service" \
    --label "SERVICE_TAGS=web,production" \
    nginx:alpine

备注

可以通过docker port查看容器的端口情况

image