构建TIdb的arm架构镜像

tikv运行的时候报错了

kubectl logs tidb-cluster-tikv-0 -n

/usr/local/bin/tikv_start_script.sh: 11: set: Illegal option -o pipefail

可以进入 TiKV 的容器,看一下

 ls -l /bin/sh

返回的结果吗?

再确认一下 TiKV 的基础镜像是什么,如果是上面提供的 arm64v8/alpine:3.10 或者 centos 理应不会报这个错。

反过来说,假如使用 Ubuntu 或者 Debian 的基础镜像,则会因为 sh 用的是 Dash,从而导致无法 set。

TIKV dockerfile FROM denali-ubuntu-glibc-arm64:latest COPY /tikv-server /tikv-server COPY /tikv-ctl /tikv-ctl

EXPOSE 20160 20180

ENTRYPOINT ["/tikv-server"]

基础镜像:

FROM arm64v8/ubuntu:18.04 MAINTAINER lydeng lydeng@denalisystem.com ENV PREFIX_DIR /usr/glibc-compat ENV GLIBC_VERSION 2.30 RUN apt-get -q update
&& apt-get -qy install
bison
build-essential
gawk
gettext
openssl
python3
texinfo
wget COPY configparams /glibc-build/configparams COPY builder /builder ENTRYPOINT ["/builder"]

FROM arm64v8/alpine:3.10
ENV TZ /etc/localtime
ENV TZDIR /usr/share/zoneinfo
COPY tikv-server /tikv-server
EXPOSE 20160
ENTRYPOINT ["/tikv-server"] 

不能用 ubuntu 做为 base image,使用上述 Dockerfile 再试试?

这个试了 也不行 可能因为我构建的是3.01的tikv ,会报一样的错误 找不到文件·

你这个dockerfile应该是高版本的才支持这么写法吧 我正在构建3.06的版本 稍后再试一下

编了新的包 还是不行呢·

按官方的Dockerfile构建的时候一直卡在这里 是怎么回事呢?
能加一下微信帮 快速沟通先帮忙解决一下Tikv的构建吗 这个搞得比较久了·

不要使用 Dockerfile 构建运行镜像,可以尝试分两步走:1.宿主机上编译出 tikv-server,2.使用如下 Dockerfile 构建运行镜像。

FROM arm64v8/alpine:3.10
ENV TZ /etc/localtime
ENV TZDIR /usr/share/zoneinfo
COPY tikv-server /tikv-server
EXPOSE 20160
ENTRYPOINT ["/tikv-server"] 

官方的 Dockerfile 不是 ARM 上运行的,容器内编译会增加不确定性和编译成本。

按你说的 那个我已经构建过了呀 但是运行的时候还是报的找不到文件 。· 上面已经回复过你一次说用这个构建的·

运行时找不到文件的报错是什么,具体指找不到哪个文件?5小时前的截图看内容是在容器中编译并构建镜像(一共有 30 个 STEP)。

除此之外还想问下,您这边的需求是:

  1. 只要全在 arm 环境运行就可以,未来如果有官方的 tidb/tikv arm 镜像直接使用现成的就行
  2. 必须要在自己的服务器上走通编译代码、build 镜像等各个环节才算完成,即使官方提供现成镜像也不能直接拿来用

是哪一种呢?

目前来说,走通你说的第一个就行了·· 先跑起来 如果官方能提供ARM镜像也可以提供一下拿来试运行! 不过最好我还是我这边自己编出来并且运行起来~

具体错误信息如下:

**kubectl logs tidb-cluster-tikv-0 -n denali-tidb**
 starting tikv-server ... 
 /tikv-server --pd=http://tidb-cluster-pd:2379 --advertise-addr=tidb-cluster-tikv-0.tidb-cluster-tikv-peer.denali-tidb.svc:20160 --addr=0.0.0.0:20160 --status-addr=0.0.0.0:20180 --data-dir=/var/lib/tikv --capacity=0 --config=/etc/tikv/tikv.toml 

/usr/local/bin/tikv_start_script.sh: exec: line 44: /tikv-server: not found

容器/usr/local/bin/tikv_start_script.sh是怎么来的 我构建的时候并没有添加这样的一个文件

是 tidb-operator 注入到容器中的。

检查一下打出来的镜像里是否存在 /tikv-server 。

这个当然是有的 不用检查啊 不然会打镜像失败的啊 ,不过提示的似乎又是找不到这个文件 那是不是因为没有执行权限的原因。似乎不也不该是··

直接用docker运行的时候报错内容:

docker logs bf79cafc6c46

standard_init_linux.go:190: exec user process caused “no such file or directory”

denali-tidb tidb-cluster-monitor-6bcbc79778-m7r6j 2/3 CrashLoopBackOff 5 4m9s

 kubectl logs tidb-cluster-monitor-6bcbc79778-m7r6j -n denali-tidb -c reloader 
standard_init_linux.go:190: exec user process caused "no such file or directory"

这个是什么原因 我的dockerfile是这么写的

FROM arm64v8/busybox
CMD ["sh"]
COPY ./build/linux/reload  /bin/reload
RUN chmod a+x /bin/reload
ENTRYPOINT [ "/bin/sh","/bin/reload" ]
CMD        [ "--watch-path=/etc/prometheus/rules", 
             "--prometheus-url=http://127.0.0.1:9090" ]

reload 的 Dockerfile 修改了很多,原来是这样的:

FROM busybox

COPY ./build/linux/reload  /bin/reload
ENTRYPOINT [ "/bin/reload" ]
CMD        [ "--watch-path=/etc/prometheus/rules", 
             "--prometheus-url=http://127.0.0.1:9090" ]

为什么要做这些修改呢?

我们先看下

其实也就修改了依赖的基础镜像而已 我是基于arm64的服务器构建的··
问题现在已经解决了 是我编译的目的文件不对,

可能默认只是linux的 。 我指定了arm参数 现在已经可以运行了 还是用这个dockerfile 所以这个dockerfile是没有问题的·

谢谢了··

:+1::+1::+1::+1: