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

推荐订阅源

MyScale Blog
MyScale Blog
A
About on SuperTechFans
G
Google Developers Blog
B
Blog RSS Feed
F
Fortinet All Blogs
WordPress大学
WordPress大学
Recent Announcements
Recent Announcements
Hugging Face - Blog
Hugging Face - Blog
Y
Y Combinator Blog
MongoDB | Blog
MongoDB | Blog
小众软件
小众软件
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
Jina AI
Jina AI
IT之家
IT之家
P
Proofpoint News Feed
美团技术团队
量子位
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
B
Blog
有赞技术团队
有赞技术团队
U
Unit 42

博客园 - 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