Jenkinsfile自定义docker容器“找不到FROM指令”

时间:2017-02-01 17:22:33

标签: jenkins docker dockerfile jenkinsfile

我刚刚开始与Jenkinsfiles和Docker合作,如果这很明显就道歉。

我有一个包含Dockerfile和Jenkins文件的repo。

Dockerfile只是通过添加几个依赖项和构建工具来扩展基础Ubuntu映像(ubuntu:trusty)。

Jenkinsfile目前只为我构建Docker容器:

node('docker') {
stage "Prepare environment"
    checkout scm
    docker.build('build-image')
}

当我运行Jenkins构建时,输出日志显示Docker容器已成功创建,但就在它成功完成之前,我得到:

Successfully built 04ba77c72c74
[Pipeline] dockerFingerprintFrom
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
[Bitbucket] Notifying commit build result
[Bitbucket] Build result notified
ERROR: could not find FROM instruction in /home/emackenzie/jenkins/workspace/001_test-project_PR-1-ROWUV6YLERZKDQWCAGJK5MQHNKY7RJRHC2TH4DNOZSEKE6PZB74A/Dockerfile
Finished: FAILURE

我一直无法找到任何有关我从互联网上收到此错误的指导,因此我们将非常感谢任何帮助

Dockerfile:

FROM    ubuntu:trusty
MAINTAINER Ed Mackenzie

# setup apt repos
RUN echo "deb http://archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/sources.list \
&& echo "deb-src http://archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/sources.list \
&& apt-get update

# python
RUN apt-get install -y python python-dev python-openssl

3 个答案:

答案 0 :(得分:3)

这是因为你的FROM行使用了一个空格而不是空格的标签。这是Jenkins CI Docker工作流插件中的一个错误,它希望该行以FROM开头,后跟一个空格。

来自Github上的jenkinsci/docker-workflow-plugin来源:

String fromImage = null;

// ... other stuff

if (line.startsWith("FROM ")) {
    fromImage = line.substring(5);
    break;
}

// ... other stuff ...

if (fromImage == null) {
    throw new AbortException("could not find FROM instruction in " + dockerfile);
}

如果使用空格而不是制表符,它应该可以正常工作。

答案 1 :(得分:3)

我刚遇到同样的问题,这是一个类似的解决方案。检查文件是否在文件开头用BOM进行编码(这可以使用Notepad ++之类的东西完成)。如果是这样,请在没有标记的情况下保存它,插件将停止抱怨。

答案 2 :(得分:1)

可以通过将“ from”语句更改为“ FROM”来解决错误