我试图在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
管道应该:
- 克隆存储库
- 构建react应用 构建Docker镜像并推送到Docker注册表。
如何让这个设置运行?或者有更好的方法来实现这一点吗?
我必须使用docker构建代理,因为所有必要的工具并不总是直接安装在主机上。
一种不那么复杂的方法是在你的普通代理上安装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的情况下使用。这应该很容易实现。