Yml文件
version: "3.5"
services:
etcd:
image: docker.io/bitnami/etcd:3
restart: always
volumes:
- ./etcd:/bitnami/etcd
environment:
ETCD_ENABLE_V2: "true"
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "[http://0.0.0.0:2379](http://0.0.0.0:2379)"
ETCD_LISTEN_CLIENT_URLS: "[http://0.0.0.0:2379](http://0.0.0.0:2379)"
ports:
- "2379:2379/tcp"
networks:
etcdnet:
networks:
etcdnet:
name: etcdnet
在当前目录下创建好etcd/data目录,并进入etcd文件夹,给data文件夹授权
chmod 777 data
如果不创建data目录或者未授权,启动后会报错,类似于如下
msg":"check file permission","error":"directory \"/bitnami/etcd/data\" exist, but the permission is \"drwxrwxr-x\". The recommended permission is \"-rwx------\" to prevent possible unprivileged access to the data"
备份及还原
网上有不少教程,但基本上都是基于集群或者主机安装的,涉及到基于docker安装etcd的备份还原资料不多,而且不少都无效。
备份
ETCDCTL_API=3 docker exec -it etcd etcdctl --endpoints=":2379" snapshot save "/home/snapshot.db"
home目录要提前创建,不会自动创建,否则会报如下错误
Error: could not open /home/snapshot.db.part (open /home/snapshot.db.part: permission denied)
将snapshot.db拷贝到宿主机,再传到其他需要还原的机器即可。
还原
相对于备份,在docker下还原麻烦一些,
进入容器, 删除目录/bitnami/etcd/data下的所有内容 ( 慎重,确保数据可以清空)
然后执行命令恢复
ETCDCTL_API=3 docker exec -it etcd etcdctl snapshot restore "/home/snapshot.db" --endpoints=":2379" --data-dir=/bitnami/etcd/data
如果使用其他目录,数据是还原的,但是etcd中的数据不是还原的,如果需要使用还原的数据库,需要设置data-dir,且此时data-dir未映射到主机,如果使用已有的data-dir目录,会报如下错误
Error: data-dir "/bitnami/etcd/data" not empty or could not be read