如何从jenkins管道编辑Docker映像中的/ etc / host

时间:2019-03-19 20:45:47

标签: docker jenkins jenkins-pipeline dockerfile

我有问题,不确定如何解决。我有一个jenkis管道,该管道使用一些映像(在同一管道上)推送到Azure注册表来创建一个Azure容器实例。现在,我需要将Docker容器映像推送到注册表中,但需要对/ etc / hosts文件进行修改。  我尝试过:

RUN  sed -i '$ a 172.x.x.x  host.domain.com ' /etc/hosts

RUN echo >> 172.x.x.x  host.domain.com /etc/hosts

在plepleine中出现错误:

1msed: can't move '/etc/hostsJCkFPo' to '/etc/hosts': Resource busy

我同意在构建阶段无法手动执行此操作,因此我搜索并调查了结果,使用“

  

-添加主机

”即可实现。 问题是我不知道如何在jenkins文件中执行此操作。我尝试在内部jenkins文件中添加以下内容(仅添加了docker build的一部分):

 def imageNametom = 'repo.azurecr.io/container-tomcat'
 def imageNameTagged = imageNametom + ':' + env.BUILD_NUMBER

 docker.build("${imageNameTagged}" , "--add-host=host.domain.com:172.x.x.x").

但出现以下错误:

docker build -t repo.azurecr.io/container-tomcat:6 --add-host=host.domain.com:172.x.x.x
invalid argument "host.domain.com" for "--add-host" flag: bad format for add-host: "host.domain.com"

如何将其添加到/ etc / hosts文件中?因此从该映像创建的容器都具有该主机文件。

谢谢

1 个答案:

答案 0 :(得分:0)

在Docker映像构建阶段您将没有IP和域名 只有从docker映像创建容器后,您才能获得此信息

所以,我的建议是使用Azure解决方案模板,该模板允许您在创建映像后调用脚本

这里是一个示例,它确实在/etc/hosts发布后修改了VM 基于docker镜像

https://github.com/Azure/azure-quickstart-templates/blob/f605b4b13a6d372d9f40142323e128b5e5e58440/slurm/azuredeploy.sh

您可以在此处找到更多Azure解决方案模板的示例 https://github.com/Azure/azure-quickstart-templates