我正在尝试在OpenShift中设置一个容器,其中运行的Jenkins可以运行docker,以利用声明性流水线,在其自己的docker容器中运行构建。这基本上需要在此容器内安装和运行docker。
我已经花了相当长的时间在这方面工作。查看了数十篇在线文章和帖子,但我还没有成功。基本上我做到了以下几点:
- 我可以在我的容器中安装docker(从baseimage openshift/jenkins-2-centos7:latest) - 但是我无法使docker运行,因为它使用systemctl,而systemctl在系统中干扰PID 1,因此在docker容器内不起作用,或者至少不被推荐使用。
systemctl start docker
这将导致Docker无法连接到守护程序(预期的情况)并显示以下错误消息:
无法连接到Docker守护程序。此主机上是否运行了“docker -d”?
因此,我尝试使用以下内容在我的Dockerfile中自己设置守护程序:
RUN usermod -aG docker $(whoami)
RUN dockerd -H unix:///var/run/docker.sock
无法挂载cgroups,因此无法使用docker。 经过一些研究,发现可以使用来自https://github.com/tianon/cgroupfs-mount/tree/master的cgroupfs-mount脚本来解决此问题。 但是,即使在这里也没有成功,出现以下错误:“启动守护程序时出错:初始化网络控制器时出错:获取控制器实例时出错:创建NAT链DOCKER失败:iptables失败:iptables -t nat -N DOCKER:iptables v1.4.21:无法初始化iptables表“nat”:权限被拒绝(必须是root用户)。 可能需要升级iptables或内核。” 现在经过数小时的努力,我已经没有任何想法了。 有人有关于如何在OpenShift中使docker工作的想法吗? 将不胜感激。