首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile不是有效的存储库/标记:无效的引用格式

Dockerfile不是有效的存储库/标记:无效的引用格式
EN

Stack Overflow用户
提问于 2018-02-18 02:56:26
回答 2查看 55K关注 0票数 13

当在jenkins代理上构建图像时,我收到了“不是一个有效的存储库/标记:无效的引用格式”错误。

  • 当docker版本< 17.05试图构建一个现代的多级dockerfile时,通常会发生此错误。
  • 代理运行在Kubernetes集群上(服务器和节点运行1.9.2-gke.1),并由以下Jenkinsfile提供。

是不是因为我将客户端的/var/run/docker.sock绑定到服务器,这是在17.03版本的docker上执行的吗?

The JenkinsFile:

代码语言:javascript
复制
#!/usr/bin/groovy

podTemplate(label: 'jenkins-pipeline', containers: [
    containerTemplate(name: 'jnlp', image: 'jenkinsci/jnlp-slave:latest', args: '${computer.jnlpmac} ${computer.name}'),
    containerTemplate(name: 'docker', image: 'docker:latest', command: 'cat', ttyEnabled: true),
    containerTemplate(name: 'helm', image: 'lachlanevenson/k8s-helm:latest', command: 'cat', ttyEnabled: true)
],
volumes:[ hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock'), ]) {

    node ('jenkins-pipeline') {

        stage('build') {
            container('docker') {
                dir ('src') {
                    sh "docker version"
                    sh "docker build -t ${tag} ."
                }
            }
        }
    }
}

检查docker的版本:

代码语言:javascript
复制
# docker version
Client:
 Version:   18.02.0-ce
 API version:   1.27 (downgraded from 1.36)
 Go version:    go1.9.3
 Git commit:    fc4de44
 Built: Wed Feb  7 21:12:37 2018
 OS/Arch:   linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:  17.03.2-ce
  API version:  1.27 (minimum version 1.12)
  Go version:   go1.9.1
  Git commit:   f5ec1e2
  Built:    Thu Dec  7 20:13:20 2017
  OS/Arch:  linux/amd64
  Experimental: false

所讨论的dockerfile:

代码语言:javascript
复制
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY XXXXXX.API.csproj ./
RUN dotnet restore
COPY . .
WORKDIR /src
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "XXXXXX.API.dll"]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-19 09:49:46

Docker构建在服务器和在17.06中引入了多阶段构建上运行。您需要在较新的服务器版本上运行构建,以支持该语法。

票数 27
EN

Stack Overflow用户

发布于 2018-06-12 08:49:16

我在使用GKE时遇到了同样的问题。我的解决办法是:

  • 添加新节点池使用Ubuntu映像。
  • 然后在这些节点上升级Docker。
  • 并且只在这个节点池上生成新的Jenkins奴隶(使用污染和容忍)。

结果:现在我可以在GKE上运行的Jenkins奴隶使用多阶段构建。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48848020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档