jenkins 在Ubuntu Docker容器中运行Docker?

cnwbcb6i  于 2023-04-05  发布在  Jenkins
关注(0)|答案(1)|浏览(176)

我尝试在Ubuntu Docker容器中运行Docker,将其用作Jenkins的Docker构建代理。
当我尝试运行docker build命令来创建docker镜像时,出现以下错误。

Jenkins出错

ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Docker构建代理的Docker文件

FROM ubuntu:latest
RUN apt update

USER root

RUN apt install -y git

RUN apt-get install \
    ca-certificates \
    curl \
    gnupg -y

RUN mkdir -m 0755 -p /etc/apt/keyrings

RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg

RUN echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  tee /etc/apt/sources.list.d/docker.list > /dev/null

RUN apt-get update

RUN apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

RUN curl -fsSL https://deb.nodesource.com/setup_19.x | bash - &&\
apt-get install -y nodejs

管道应:
1.克隆存储库
1.构建React应用程序
1.构建Docker镜像并将其推送到Docker注册表。
我怎样才能让这个设置运行?或者有没有更好的方法来实现这一点?
我必须使用Docker构建代理,因为所有必要的工具并不总是直接安装在主机上。

k4aesqcs

k4aesqcs1#

一个不太复杂的方法是在一个普通代理上安装docker,然后在这台机器上使用docker引擎来构建你的docker镜像,让我展示一个类似的Jenkinsfile示例,其中使用了这种方法:'''管道{代理任何环境{ DOCKER_REG_CRED = credentials(' Nexus-Creds ')DOCKER_REG =“”}阶段{

stage('Building Docker Image') {
        agent {
            node {
                label 'jenkins-opensource-linux'
            }
        }
        steps {
            script {
                try {
      script {
        sh 'docker build -t ${DOCKER_REG}/docker-release/reactapp:${buildName} .'
        sh "docker login -u ${DOCKER_REG_CRED_USR} -p ${DOCKER_REG_CRED_PSW} ${DOCKER_REG}"
        sh 'docker push ${DOCKER_REG}/docker-release/lttechapp:${buildName}'
      }
         } catch (error) {
                    println error
                }
            }
        }
        post {
            success {
              script {
                cleanWs()
              }
            }
          }
    }
    
}

}'''我的代理jenkins-opensource-linux是一个安装了docker引擎的linux虚拟机。请确保您将docker设置为在没有root的情况下使用。这应该很容易实现。

相关问题