tikv运行的时候报错了
kubectl logs tidb-cluster-tikv-0 -n
/usr/local/bin/tikv_start_script.sh: 11: set: Illegal option -o pipefail
tikv运行的时候报错了
/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 构建运行镜像,可以尝试分两步走: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)。
除此之外还想问下,您这边的需求是:
是哪一种呢?
目前来说,走通你说的第一个就行了·· 先跑起来 如果官方能提供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是没有问题的·
谢谢了··