为什么我需要主机网络才能在jenkins服务器上构建docker映像?

时间:2019-10-29 07:58:36

标签: docker jenkins jelastic

在我的Jenkins服务器(部署有官方jenkins image)上,我需要运行以下代码来构建我的Docker映像

def buildDockerImage() {
  sh "docker build --network=host -t $DOCKER_REPO ."
}

请注意--network=host选项。

现在,我的问题是在我的开发笔记本电脑上,我不需要该选项来构建映像。这是为什么?为什么我的笔记本电脑上不需要它,但我在jenkins服务器上需要它? Jenkins服务器托管在Jelastic环境中,如下所示:

env:
    topology:
        nodes:
          - image: jenkins/jenkins:lts
            count: 1
            cloudlets: 32
            nodeGroup: cp

Docker的安装如下:

mv /etc/init.d/kmod /etc/init.d/kmod.back
apt -y install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
apt update
apt -y install docker-ce docker-ce-cli containerd.io
service docker start
usermod -aG docker jenkins

我需要配置一些东西以使其在没有该网络选项的情况下发生吗?

2 个答案:

答案 0 :(得分:2)

误解发生在预装Jenkins并在其后安装Docker工具的位置。 Jelastic提供使用变量和特殊重定向的功能。默认情况下,Jenkins从端口80重定向到8080,您可以通过已经生成的环境名称直接访问它。 您应该遵循的方法是通过特殊的' JELASTIC_EXPOSE = DISABLED '变量禁用自动重定向,并使用公共IP。如果您不想使用公共IP,请查找端点功能。

ports文章

中对此有所有描述

答案 1 :(得分:1)

根据Jelastic的回答,我在安装我的Jenkins CI / CD环境的jps清单中添加了以下步骤:

actions:
    setupJenkinsForDocker:
      - api:
          - method: jelastic.environment.control.AddContainerEnvVars
            params:
              nodeGroup: cp
              vars:
                JELASTIC_EXPOSE: DISABLED
      - api:
          - method: jelastic.environment.control.AddEndpoint
            params:
              nodeId: ${nodes.cp.id}
              privatePort: 8080
              protocol: TCP 
              name: jenkins/jenkins

当然,这意味着我适应了所有在该jenkins环境上触发某些作业的webhooks,因为这需要在我的jenkins端点中使用一个端口。

现在,当我构建需要互联网连接的docker映像时,不再需要设置选项--network=host