参考https://medium.com/@manav503/how-to-build-docker-images-inside-a-jenkins-container-d59944102f30
按照文章里所介绍的,实现在Jenkins容器环境中依然能够调用Docker,需要做到以下几步
为此,该博客构建的Dockerfile如下
from jenkinsci/jenkins:lts
USER root
RUN apt-get update -qq \
&& apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
RUN apt-get update -qq \
&& apt-get install docker-ce=17.12.1~ce-0~debian -y
RUN usermod -aG docker jenkins
然而我在实践的时候,发现如下问题
安装的时候没有任何输出
这是由于命令行指令中有-qq
在 apt-get update -qq这个命令中,-qq是一个选项名。这是APT命令行工具apt-get的一个参数。它的含义是"无视’-q’选项,除了错误之外,什么都不输出"。
再简单点说,就是当你运行带有-qq参数的apt-get update命令时,这个命令会在后台默默。它只有在遇到错误时才会输出信息,其他时候它都会默默工作,不会打印任何多余的信息。
执行update的时候总是error
首先我采取了换源策略,参考的博客是https://blog.csdn.net/weixin_45067618/article/details/122234387
使用的指令如下
# 查看内部软件源
cat /etc/apt/sources.list
# 查看系统版本
cat /etc/os-release
# PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
# NAME="Debian GNU/Linux"
# VERSION_ID="9"
# VERSION="9 (stretch)"
# ID=debian
# HOME_URL="https://www.debian.org/"
# SUPPORT_URL="https://www.debian.org/support"
# BUG_REPORT_URL="https://bugs.debian.org/"
然后根据系统版本,去清华大学镜像(https://mirrors.tuna.tsinghua.edu.cn/help/debian/)或者阿里云镜像(https://developer.aliyun.com/mirror/debian?spm=a2c6h.13651102.0.0.3e221b11vzU4iS)寻找对应版本的镜像源,然后替换sources.list
的内容就可以
然而,我发现还是总会报错debian 9 apt update失败 (404 ign: E: W: N:)
后来查阅博客https://blog.csdn.net/vipdafei/article/details/130930882,才发现,原来debian 9的源已经停止维护了
从2023年4月23日起,debian9的源包地址更换至新地址。
新地址如下:
deb http://archive.debian.org/debian/ stretch main contrib non-free
deb-src http://archive.debian.org/debian/ stretch main contrib non-free
deb http://archive.debian.org/debian-security/ stretch/updates main contrib non-free
deb-src http://archive.debian.org/debian-security/ stretch/updates main contrib non-free
deb http://archive.debian.org/debian/ stretch-backports main contrib non-free
将上述内容输入到sources.list
就可以正常更新了
执行最后一步apt-get install docker-ce=17.12.1ce-0debian -y的时候报错debconf: unable to initialize frontend: Dialog
参考https://blog.csdn.net/jiangjiang_jian/article/details/88822981
是因为在使用apt-get安装依赖时,可能会有对话框,制作镜像时如果不选择会导致失败。
解决方案:在Dockerfile中增加一句:
ENV DEBIAN_FRONTEND noninteractive
因此,在修改之后,Dockerfile的指令变成了这样
from jenkinsci/jenkins:lts
USER root
ADD ./sources.list /etc/apt/
#RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list
ENV DEBIAN_FRONTEND noninteractive
RUN cat /etc/os-release && cat /etc/apt/sources.list && apt-get update -qq\
&& apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/debian/ \
$(lsb_release -cs) \
stable"
RUN apt-get update -qq\
&& apt-get install docker-ce=17.12.1~ce-0~debian -y
RUN usermod -aG docker jenkins
但还是无法安装,因为版本不对
改成上面这样,还是无法安装,提示Docker Desktop requires a newer WSL kernel version
。因为我们用的jenkins版本不对。
jenkinsci/jenkins
:这是旧的Jenkins Docker镜像的名称。它是由Jenkins社区维护和发布的。早些年,Jenkins项目在jenkinsci这个Docker Hub命名空间下发布它们的官方镜像。
jenkins/jenkins
:这是新的Jenkins Docker镜像的名称。同样,它也是由Jenkins社区维护和发布的。不过,从2017年开始,Jenkins项目将官方镜像的发布位置从jenkinsci命名空间迁移到了jenkins命名空间下。
上述参考的博客都太老了,因此有必要更新了
新版本的Dockerfile如下所示
其中./sources.list
来自于清华大学镜像https://mirrors.tuna.tsinghua.edu.cn/help/debian/,选的是Debian 12版本
from jenkins/jenkins
USER root
ADD ./sources.list /etc/apt/
ENV DEBIAN_FRONTEND noninteractive
RUN cat /etc/os-release && cat /etc/apt/sources.list && apt-get update -qq\
&& apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common
RUN curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/debian/ \
$(lsb_release -cs) \
stable"
RUN apt-get update -qq\
&& apt-get install docker-ce -y
RUN usermod -aG docker jenkins
搭建Jenkins服务可以参考我之前的博客https://blog.csdn.net/weixin_42763696/article/details/134499518