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

4
我尝试使用“在Docker容器内构建”选项和“从Dockerfile构建”的指南,在这里遵循CloudBees Docker自定义构建环境插件。我已将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

提前致谢。

3个回答

4
我想我最终得到了答案!
我之前也遇到过和您同样的问题,而且实际上非常愚蠢。
我猜您在项目配置页面上勾选了“在Docker容器中构建”。您还必须指定一个路径,其中要确保存放有一个Dockerfile。
这就是关键所在。如果这个路径中有Dockerfile,则“Dockerfile”旁边的编写空间必须留空。我猜这个空间是用来使用不在指定路径内的Dockerfile的。如果没有这个,Jenkins会认为您的Dockerfile在指定的空间内,而不会考虑任何其他位置。
由于我是StackOverflow的新手,暂时无法发布任何截图。但是等我可以的时候,我会确保您拥有它,以便更轻松地阐述我的观点。
我真诚地希望这能帮到您。我也曾经看到类似的错误信息,现在我可以毫无困扰地构建我的Docker镜像了。

0

假设您正在Jenkins从机器上运行此设置。

enter image description here

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


0
如果您目前在包含Dockerfile的目录中,则以下命令应该有效:
$ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 --file Dockerfile .

这相当于:

$ docker build --tag b916af9f0b3e48425cb54c323d1a3adb749a72a1 .

在这两种情况下,.指定了构建上下文——要发送到Docker守护进程的目录和文件集。使用.将其简单地设置为当前目录。由于Dockerfile在当前目录中,因此它将被发送到守护进程。
你的问题在于它正在寻找位于/var/lib/jenkins/jobs/lumi/workspace/Dockerfile的Dockerfile。可以想象,Dockerfile并不在那里,而是在你的当前目录中。由于只有目录/var/lib/jenkins/jobs/lumi/workspace中的文件被发送到Docker守护进程,所以它没有你的Dockerfile来进行构建。
我知道这听起来有点奇怪。在更好理解之前,最好还是从包含Dockerfile的目录运行构建,以避免出现此类问题。
(另外,不要将Dockerfile放在主目录或下载文件夹中,否则会导致所有数据都被发送到守护进程,等待时间很长)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接