Docker Compose 安装 Etcd

在云原生环境下,etcd 是最核心的存储组件之一,也是很多云原生应用都依赖的存储组件,如 Kubernetes、CoreDNS、Rook等。

etcd 在2026年5月最新版本

  • v3.6.11
  • v3.5.30
  • v3.4.44

etcd 的 Docker 容器镜像托管在 Quay.ioGcr.io 两个平台,藏云阁提供镜像的同步

etcd 项目最初由 CoreOS 公司创建并开源,因此其早期镜像托管在 CoreOS 活跃使用的 quay.io 上。随着 etcd 成为 CNCF(云原生计算基金会) 的项目,并成为 Kubernetes 的核心数据存储,它与 Kubernetes 生态的联系愈发紧密。为了让 Kubernetes 集群的部署和运行更加稳定高效,etcd 官方在 2017 年底决定将 gcr.io 作为主要分发渠道之一,但同时也明确表示 quay.io 上的镜像不会被废弃,会继续维护。

其他 etcd 资源:

docker-compose.yml

单机使用 docker-compose 运行 etcd 可以直接使用如下配置。

核心需要注意的配置是 /data/etcd 这个挂载,要指定一个宿主机上的目录,用来保存 etcd 的数据。由于 etcd 是 IO 敏感型的,强烈推荐使用 SSD 类型的磁盘来挂载。

yaml 复制代码
services:
  etcd:
    container_name: etcd
    image: registry.cncfstack.com/quay.io/coreos/etcd:v3.6.11
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 2G
    ports:
      - "2379:2379"
      - "2380:2380"
    volumes:
      - /data/etcd:/var/lib/etcd
      - /etc/localtime:/etc/localtime:ro
    environment:
      - ETCD_NAME=etcd-node01
      - ETCD_DATA_DIR=/var/lib/etcd
      - ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_ADVERTISE_CLIENT_URLS=http://0.0.0.0:2379
      - ETCD_LISTEN_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_ADVERTISE_PEER_URLS=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER=etcd-node01=http://0.0.0.0:2380
      - ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster-token
      - ETCD_INITIAL_CLUSTER_STATE=new
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
      - ETCD_SNAPSHOT_COUNT=50000
      - ETCD_LOG_LEVEL=info
      - ETCD_LOGGER=zap
      - ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381
    healthcheck:
      test: ["CMD", "etcdctl", "endpoint", "health"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 30s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

在 docker-compose.yml 目录下执行如下命令启动

bash 复制代码
docker-compose up -d

etcdctl alias

etcd 在基于容器部署时,在宿主机上是没有 etcdctl 工具,而直接使用 docker run 运行 etcdctl 命令太长也不方便。

可以通过添加一个 alias 别名的方式来简化命令。

bash 复制代码
IP=`ip addr show eth0 |grep "inet\ "|awk -F'/' '{print $1}'|awk '{print $2}'`
alias etcdctl="docker run -i --rm registry.cncfstack.com/quay.io/coreos/etcd:v3.6.11 etcdctl --endpoints http://${IP}:2379 "

后续可以直接使用 etcdctl 命令来操作 etcd。

验证

验证过程用于判断 etcd 是否安装成功,能否正常读写数据

  • 查看etcd容器状态

使用 docker compose ls 命令查看 etcd 容器状态

bash 复制代码
# docker compose ls  |grep etcd
etcd                running(1)          /xxxxxx/etcd/docker-compose.yml
  • 查看etcd健康状态

etcd 集群健康状态可以通过 etcdctl endpoint health 命令查看

复制代码
# etcdctl endpoint health
http://192.168.1.1:2379 is healthy: successfully committed proposal: took = 2.373165ms
  • 验证etcd数据读写

读写数据测试

bash 复制代码
# etcdctl put aa bb
OK
# etcdctl get aa
aa
bb
相关推荐
开始学AI20 小时前
Codex2API Docker 使用宿主机代理:OAuth Token 兑换 403 问题排查与解决方案
运维·docker·容器
做前端的娜娜子21 小时前
Docker 常用命令全梳理:从镜像拉取到容器编排
docker·容器·掘金·金石计划
郝开1 天前
Docker Compose 本地环境搭建:kkFileView
运维·docker·容器
jufeng13071 天前
【系列:TDengine 工业物联网实战:从零搭起可运行系统 · 第 10 篇】
docker·时序数据库·tdengine·高可用
国际云,接待1 天前
Docker 容器一直显示 unhealthy:从 Healthcheck 输出到依赖故障的完整排查
运维·docker·容器
IT大白鼠1 天前
容器安全入门:K8s常见基础安全风险通俗解读
安全·容器·kubernetes
伞伞悦读1 天前
Docker 安装 MinIO 完整教程(新手友好版)
docker·容器·eureka
Lethehong1 天前
把Blinko放进极空间:Docker 部署自托管笔记,并实现多设备远程访问
笔记·docker·容器
xrlfreedom2 天前
大厂 MCP 面试实录:内部 REST API 封装为可审计 MCP Tools 的落地方案
docker·mcp·提示注入防护
摇滚侠2 天前
《Docker技术入门与实战 第4版》阅读笔记 2 Docker 镜像
笔记·docker·容器