使用 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 上下文。这应该可以解决您的路径问题。
我尝试按照此处 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 上下文。这应该可以解决您的路径问题。