• DevOps
  • Kubesphere自定义jenkins的agent无法使用docker功能

创建部署问题时,请参考下面模板,你提供的信息越多,越容易及时获得解答。如果未按模板创建问题,管理员有权关闭问题。
确保帖子格式清晰易读,用 markdown code block 语法格式化代码块。
你只花一分钟创建的问题,不能指望别人花上半个小时给你解答。

操作系统信息
例如:虚拟机,OpenEuler 24.03 LTS

Kubernetes版本信息
[root@k8s-master1 ~]# kubectl version

Client Version: v1.28.12

Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3

Server Version: v1.28.12

容器运行时
[root@k8s-master1 ~]# crictl version

Version: 0.1.0

RuntimeName: containerd

RuntimeVersion: v1.7.13

RuntimeApiVersion: v1

KubeSphere版本信息

kubesphere v4.1.2。 在线 kk 安装。

问题是什么
在Devops中,因为我的java版本是使用的21,所以自己搭建了一个agent。dockerfile如下:

FROM kubespheredev/builder-base:latest

ARG JDK_VERSION 1.8.0
ARG JDK_HOME /usr/lib/jvm/java-${JDK_VERSION}-openjdk

# java
ENV JAVA_VERSION $JDK_VERSION

RUN if [ "x${JAVA_VERSION}" = "x21" ]; then \
      ARCH= && uArch="$(uname -m)" \
        && case "${uArch##*-}" in \
          x86_64) ARCH='x64';; \
          aarch64) ARCH='aarch64';; \
          *) echo "unsupported architecture"; exit 1 ;; \
        esac \
      && wget https://download.oracle.com/java/${JAVA_VERSION}/latest/jdk-${JAVA_VERSION}_linux-${ARCH}_bin.rpm \
      && rpm -ivh jdk-${JAVA_VERSION}_linux-${ARCH}_bin.rpm; \
    else \
      yum install -y java-${JAVA_VERSION}-openjdk-devel java-${JAVA_VERSION}-openjdk-devel.i686; \
    fi
# maven
ENV MAVEN_VERSION 3.5.3
RUN curl -f -L https://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz | tar -C /opt -xzv
ENV M2_HOME /opt/apache-maven-$MAVEN_VERSION
ENV JAVA_HOME $JDK_HOME
ENV maven.home $M2_HOME
ENV M2 $M2_HOME/bin
ENV PATH $M2:$PATH:JAVA_HOME/bin

# ant
ENV ANT_VERSION 1.10.7
RUN cd && \
    wget -q https://archive.apache.org/dist/ant/binaries/apache-ant-${ANT_VERSION}-bin.tar.gz && \
    tar -xzf apache-ant-${ANT_VERSION}-bin.tar.gz && \
    mv apache-ant-${ANT_VERSION} /opt/ant && \
    rm apache-ant-${ANT_VERSION}-bin.tar.gz
ENV ANT_HOME /opt/ant
ENV PATH ${PATH}:/opt/ant/bin

# Set JDK to be 32bit
COPY set_java $M2
RUN if [ "x${JAVA_VERSION}" = "x21" ]; then \
      rm $M2/set_java; \
    else \
      $M2/set_java && rm $M2/set_java; \
    fi

CMD ["mvn","-version"]

在修改了jenkins-casc-config/jenkins_user.yaml后,jdk的版本确实没有问题,但是流水线在制作镜像的时候会产生如下报错:

[root@533914a69507 jenkins]# docker build .
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

请问各位大佬该如何解决这个docker无法使用的问题

    Bellatrix base 镜像错了,应该使用 -podman 后缀镜像。比如 FROM kubespheredev/builder-base:v4.1.3-podman

    btw, 你可以使用最新的agent镜像试下,里面已经安装了 jdk21: docker pull kubesphere/builder-base:master

      Bellatrix 确实使用 kubespheredev/builder-base:v4.1.3-podman 解决了这个问题,感谢大佬!

      stoneshi-yunify 大佬你好,根据你的描述我使用了 kubespheredev/builder-base:v4.1.3-podman来构建镜像。但是在运行到docker build时,发现不能运行Dockerfile中的命令如RUN、COPY等,具体报错如下:

      STEP 4: RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
      Error: error committing container for step {Env:[PATH=/usr/java/openjdk-21/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin JAVA_HOME=/usr/java/openjdk-21 LANG=C.UTF-8 JAVA_VERSION=21 PARAMS=--spring.cloud.nacos.server-addr=guizhou-nacos.guizhou:8848 --spring.data.redis.host=guizhou-redis.guizhou --spring.data.redis.port=6379 --server.port=8080] Command:run Args:[/bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone] Flags:[] Attrs:map[] Message:RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone Original:RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone}: error copying layers and metadata for container "5e90c47b547140f2029fe7bb81f0b186c1a2f18167736785ead8e6a20231c879": Error initializing source containers-storage:1db38f3b07f92b15d0851736a423666cc627620482dcb2f7502c3c9f97321e23-working-container: error extracting layer "7f987047311039ffdc38047a499d042ad242222dcad679181fe47d05eed191de": lgetxattr /var/lib/containers/storage/overlay/8fd50613379c0ef35cdb10623952117d14ba7bfc9511b8b7f1050dab27a7bee8/merged/dev/ptmx: no such file or directory
      script returned exit code 125

      请问对此您是否有什么解决的思路,感谢!

        Bellatrix 如果直接使用 kubesphere/builder-base:master 这个镜像的话,就会跟一开始的报错一样,无法连接到docker daemon

          5 天 后

          Bellatrix 你的集群是 arm 环境对吧? 因为你的节点上没有安装docker daemon,所以你不能在流水线agent中使用 docker 来构建镜像,要使用 podman (不依赖docker). kubesphere/builder-base:master 这个镜像里面已经安装了 podman。 podman 的大多数命令跟docker是一样的,参考官方文档使用。

            stoneshi-yunify 感谢大佬,按您的说法问题已经解决。需要注意的是在使用 kubesphere/builder-base:master 这个镜像中所有的docker命令都应当替换为 podman命令,并且还需要进行一个安装更新操作:

            apt update && echo "Y" | apt install fuse-overlayfs

            安装之后podman才可以正常使用。正常进行dockerfile构建和镜像推送。 :