【问题标题】:Jenkins: Can't run commands inside Docker containerJenkins:无法在 Docker 容器中运行命令
【发布时间】:2018-10-24 05:31:46
【问题描述】:

我正在尝试构建一个简单的 Docker 映像,然后使用 Jenkins Pipeline 在其中运行命令。我很困惑,因为我似乎是在我的构建服务器上执行命令,而不是在我的 docker 容器内。当我通过运行以下命令在我构建的容器中运行“pwd”时:

node ('docker2') {
    docker.withRegistry('https://my-registry.com', 'my-creds') {

        stage ('Checkout SCM') {
            checkout scm
        }

        // Build Docker image from Dockerfile
        stage ('Build Docker Image') {
            def myImage = docker.build("my-image:${env.BUILD_ID}")

            myImage.inside {
                sh 'pwd'
            }
        }
    }
}

它返回“/home/build/workspace/Docker-Build-And-Push”,这似乎是我从中构建容器的工作目录,而不是容器本身内部的目录。

此外,当我尝试在我的容器中运行“mkdir test”时,它在我的构建服务器中创建了一个测试目录,而不是在容器中。但是当我运行“主机名”时,它不会返回我的构建服务器的主机名,而是一个随机的数字字符串,所以这似乎来自我的容器......

我的 Dockerfile 非常简单,只包含“FROM alpine:latest”。

在我看来,我的命令应该在我的容器内而不是在我的构建服务器上运行。我究竟做错了什么?

【问题讨论】:

    标签: docker jenkins jenkins-pipeline


    【解决方案1】:

    Jenkins 使用-v parameter 将工作空间安装在您的 docker 容器中。因此,您会看到构建服务器的目录结构,如果您创建文件,它实际上是在工作区中创建的。

    您应该能够在您构建的日志中看到确切的 docker 命令。

    【讨论】:

    • 谢谢,这是正确的答案。现在已经很明显了,已经被指出了-.-。非常感谢您的帮助!
    • @buffcat 我也有类似的困惑。很高兴它有帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多