首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Jenkins Docker内部运行主机Docker

从Jenkins Docker内部运行主机Docker
EN

Stack Overflow用户
提问于 2019-11-21 03:19:57
回答 1查看 52关注 0票数 0

是否可以从正在运行的Jenkins Docker Container中创建和运行Docker containers for CI/CD?因此,基本上可以从运行的容器中访问主机服务器上的Docker。

在我的主机服务器(Ubuntu 19.04)上安装了Docker (Docker版本19.03.3)。通过运行以下命令,我创建了一个Jenkins Container,将权限授予Docker (所以我想):

代码语言:javascript
复制
mkdir /home/myuser/Desktop/jenkins_home
docker run -dit --name jenkins -v /home/myuser/Desktop/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 jenkins/jenkins:lts

在Jenkins中,我创建了一个管道,它从Git加载一个Jenkinsfile,如下所示:

代码语言:javascript
复制
pipeline {
    agent {
        docker {
            image 'ubuntu:19.04'
            args '-u root:sudo -p 3000:3000'
        }
    }
    stages {
        stage('Install') {
            steps {
                sh 'apt-get update'
                sh 'apt-get install -y curl'
                sh 'curl -sL https://deb.nodesource.com/setup_13.x | sh -'
                sh 'curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -'
                sh 'echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list'
                sh 'apt-get update'
                sh 'apt-get install -y nodejs yarn'
            }
        }
        stage('Build') {
            steps {
                sh './build.sh'
            }
        }
    }
}

当我运行管道时,当我试图指示Docker拉取ubuntu:19.04 Docker镜像时,它崩溃了。错误是docker: not found

我的Jenkins Container和主机Docker访问文件之间的某个连接配置错误。要在主机服务器上从Docker Container中运行Docker命令,需要进行什么配置?

EN

回答 1

Stack Overflow用户

发布于 2020-06-08 02:27:10

如果您想要从Jenkins容器创建和运行Docker containers for CI/CD,可以通过在Jenkins作业上创建shell命令来实现,该命令在Docker主机上运行ssh命令。

这需要在Docker主机上授权Jenkins容器ssh公钥,所以在Docker主机上应该有authorized_keys文件。要在Jenkins容器中使用相同的ssh密钥,可以在Jenkins容器上使用绑定挂载和ssh密钥。使用docker-compose的示例:

代码语言:javascript
复制
volumes:
- /home/user/.ssh/id_rsa:/var/jenkins_home/.ssh/id_rsa 
- /home/user/.ssh/id_rsa.pub:/var/jenkins_home/.ssh/id_rsa.pub

这是一个shell命令的示例内容,用于从Jenkins作业启动和更新Docker主机上的容器:

代码语言:javascript
复制
cat ./target/stack/installer-*.tar | ssh root@${DOCKER_HOST} \
        /home/user/Build-Server/remote-installer.sh

在上面的命令中,在Docker主机上启动了一个安装程序。因此,在Docker主机上部署/更新了新的容器。remote-installer.sh脚本从标准输入接收文件,并使用tar命令将其解压缩。

代码语言:javascript
复制
TEMPDIR=`mktemp -d`
echo "unarchiving to $TEMPDIR"
tar xv -C "$TEMPDIR"
...

这适用于将Docker容器与Jenkins容器放在同一服务器上或将Docker容器和Jenkins容器放在不同服务器上的两种情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58961848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档