etcd官方docker镜像及dockerfile问题处理

解决下我之前etcd使用docker镜像启动的坑

1、问题镜像docker-file:

这个dockerfile看着看不出来问题,但如果有人真的执行我之前两篇文章的文件,就会有问题,什么问题呢,无法连接到etcd,由于我是刚装上docker,排查了一圈,包括docker网络及是否是本地docker的网络问题,排查了一圈之后,发现原来是我的dockerfile的问题:

# 使用一个轻量级的基础镜像
FROM golang:latest
 
# 设置工作目录
WORKDIR /app
 
# 将本地编译好的可执行文件复制到容器中,此处etcd_server.exe是我提前打好的etcd3.5的可编译文件
COPY ./server/etcd_server .
 
# 暴露应用程序监听的端口(如果有的话)
EXPOSE 2379
 
# 启动应用程序
CMD ["./etcd_server"]

2、解决方案

2.1 换成正规官网的etcd镜像

这个换成官网的etcd,我看默认启动的还是127.0.0.1,所以在启动命令的时候要加入"--advertise-client-urls=http://0.0.0.0:2379", "--listen-client-urls=http://0.0.0.0:2379"

# 使用官方 etcd 镜像
FROM quay.io/coreos/etcd:latest

# 将 etcd 数据目录复制到容器中
WORKDIR /etcd

VOLUME /data

# 暴露 etcd 默认端口
EXPOSE 2379 2380

# 启动脚本
CMD ["etcd"]
2.2 修改镜像file

问题是由于在docker中监听的是127.0.0.1,所以无法暴露在外面,修改CMD ["./etcd_server", "--advertise-client-urls=http://0.0.0.0:2379", "--listen-client-urls=http://0.0.0.0:2379"],此处让在容器中使用监听所有端口,问题得到解决:

# 使用更轻量的基础镜像
FROM golang:latest

# 设置工作目录并复制本地文件到容器中
WORKDIR /app

COPY ./etcd_server .

# 确保 etcd_server 具有可执行权限
RUN chmod +x etcd_server

# 暴露应用程序监听的端口(如果有的话)
EXPOSE 2379

# 启动应用程序
CMD ["./etcd_server", "--advertise-client-urls=http://0.0.0.0:2379", "--listen-client-urls=http://0.0.0.0:2379"]

当然我还尝试了,在镜像打包好,然后把etcd_server在docker容器中直接手动启动,这个是无法解决的,由于docker中该服务并没有启动,所以端口没有暴露出去

此处算是把etcd的docker镜像部署收尾了

你可能感兴趣的:(其他相关技术分享,etcd,docker,数据库)