使用 Jenkins CloudBees Docker 自定义构建环境插件时无法使用 Docker 文件

Not able to use a Dockerfile when using Jenkins CloudBees Docker Custom Build Environment Plugin

我尝试按照此处 CloudBees Docker Custom Build Environment Plugin

中的指南将 "Build inside a docker container" 与选项 "Build from Dockerfile" 一起使用

我已将 Dockerfile 放在工作区根目录下 (/var/lib/jenkins/jobs/lumi/workspace)。然后当构建被触发时,我在下面得到错误。我认为它能够找到 Dockerfile,但由于某种原因它无法构建映像。

Build Docker image from ./Dockerfile ...
$ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 --file Dockerfile /var/lib/jenkins/jobs/lumi/workspace
The Dockerfile (Dockerfile) must be within the build context (/var/lib/jenkins/jobs/lumi/workspace)
FATAL: Failed to build docker image from project Dockerfile
java.lang.RuntimeException: Failed to build docker image from project Dockerfile
    at com.cloudbees.jenkins.plugins.docker_build_env.Docker.buildImage(Docker.java:116)
    at com.cloudbees.jenkins.plugins.docker_build_env.DockerfileImageSelector.prepareDockerImage(DockerfileImageSelector.java:47)
    at com.cloudbees.jenkins.plugins.docker_build_env.DockerBuildWrapper.setUp(DockerBuildWrapper.java:126)
    at hudson.model.Build$BuildExecution.doRun(Build.java:156)
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:537)
    at hudson.model.Run.execute(Run.java:1741)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:381)
Finished: FAILURE

Dockerfile内容如下:

FROM php:5.6.11-apache

提前致谢。

如果您当前位于包含 Docker 文件的目录中,则以下操作应该有效:

$ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 --file Dockerfile .

相当于:

$ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 .

在这两种情况下,. 指定构建上下文 - 发送到 Docker 守护程序的目录和文件集。使用 . 只是将其设置为当前目录。由于 Docker 文件在当前目录中,它将被发送到守护进程。

您的示例中的问题是它正在 /var/lib/jenkins/jobs/lumi/workspace/Dockerfile 寻找 Docker 文件。据推测,Docker 文件不存在,但在您的当前目录中。由于只有目录 /var/lib/jenkins/jobs/lumi/workspace 中的文件被发送到 Docker 守护程序,因此它没有您的 Docker 文件可用于构建。

我意识到这听起来有点奇怪。在它变得更有意义之前,最简单的方法是 运行 从带有 Docker 文件的目录中构建您的构建以避免此类问题。

(此外,不要将 Docker 文件放在主目录或下载文件夹中,因为这会导致等待很长时间,因为所有数据都会发送到守护程序)。

我猜终于找到答案了!

我刚刚遇到了和你现在一样的问题,实际上很愚蠢。

假设您在项目配置页面中勾选了"build inside a Docker container"。您还必须指定路径,确保 Docker 文件位于存储库中。

这就是重点。如果此路径中有 Docker 文件,则 "Dockerfile" 旁边的 space 必须留空。我想这个 space 在于使用不在指定路径内的 Docker 文件。如果没有这个,Jenkins 将假定您的 Docker 文件位于您指定的 space 内,并且不会考虑任何其他位置。

由于我是 Whosebug 的新手,我还不能post任何截图。但是当我可以的时候,我会确保你有它,这样我就可以更容易地表达我的观点。

我真诚地希望这会有所帮助。我在输出中有相同类型的错误消息,现在我可以毫无问题地构建我的 Docker 图像。

假设您是运行 Jenkins 从属机器上的此设置。

${WORKSPACE} 将设置 docker 上下文。这应该可以解决您的路径问题。