问题描述
我有两台托管gitlab-runner的服务器。我将一个用作开发版本,将另一个用作生产版本。我在两台机器上都有相同的配置,因此最新版本的gitlab-runner和最新版本的Docker / docker-compose。
在我的dockerfile中,我需要下载net-tools软件包才能使用netstat命令。构建器docker是OpenJDK 14的正式映像,它基于RHEL。因此,为了安装新软件包,我只能使用dnf / microdnf或yum。
好的,到目前为止,一切都应该简单明了。但是...当机器尝试运行命令时:
RUN microdnf install net-tools
在登台计算机上:
/ bin / sh:microdnf:找不到命令
相反,在生产机器上:
工作成功。
好的,那么百胜呢?让我们更改Dockerfile的net-tools安装
RUN yum install net-tools -y
管道已启动,已安排作业并正在安装暂存机
工作成功。
在生产机器上,您可以看到:
/ bin / sh:yum:找不到命令
我觉得我有点被困,因为没有其他方法可以安装软件包(dnf应该是另一种可能的方法,但是不能同时安装在两个docker镜像上),并且我不想应用一种可以“测试”通过microdnf或yum安装。
我希望我已尽可能清楚地说明问题。
解决方法
这不是一个适当的解决方案,但至少可以奏效。我的意思是,这只是一种解决方法,必须尽快予以替换。
无论如何,在我的docker-files中,我安装了microdnf / yum ...我只是两者都做,忽略了错误。在Linux中,您可以“覆盖”退出状态,在命令后附加'; exit(0)'。
RUN yum install net-tools -y; exit 0
RUN microdnf install net-tools -y; exit 0
在两台机器上,什么追加只是通过yum和microdnf执行安装,当然,其中之一将成功执行该操作;相反,另一个将以“窒息错误”终止。
此解决方法将使您能够以一种非常粗糙的方式解决此问题,但至少...可以。 “窒息的错误”将被忽略,操作不会崩溃。