具有无效标记或引用的Docker推送错误

时间:2017-08-08 20:36:11

标签: docker travis-ci treescale

我有一个试图推送到docker注册表的Travis CI版本,这就是我在构建日志中看到的内容:

[info] Built image repo.treescale.com/[secure]/inland24/plant-simulator:1.0-SNAPSHOT

但下一行,我会看到以下内容:

Error parsing reference: "/:" is not a valid repository/tag: invalid reference format

这就是我的docker push命令:

docker push $DOCKER_REGISTRY_URL/$APPLICATION_NAME:$IMAGE_VERSION_DEV;

以下是参数:

   - APPLICATION_NAME    = [secure]/inland24/plant-simulator
   - IMAGE_VERSION_DEV   = 1.0-SNAPSHOT
   - DOCKER_REGISTRY_URL = repo.treescale.com

假设[安全]被解析为正确的用户名!我得到的这个错误是什么以及如何解决它?

我确实尝试列出所有图像,我可以看到我的图像存在于运行构建的本地计算机上:

REPOSITORY                                           TAG                      IMAGE ID            CREATED                  SIZE
repo.treescale.com/[secure]/inland24/plant-simulator   1.0-SNAPSHOT             34842cf7482e        Less than a second ago   225 MB
anapsix/alpine-java                                  8_server-jre_unlimited   bd197f461851        11 days ago              124 MB

3 个答案:

答案 0 :(得分:1)

你的错误清楚地表明了什么是错的。您正在使用

docker push $DOCKER_REGISTRY_URL/$APPLICATION_NAME:$IMAGE_VERSION_DEV;

解析引用时出错:" /:"不是有效的存储库/标记:无效的参考格式

如果我清空所有环境变量,那么我得到

docker push /:

这给了我同样的错误。在docker push之前使用env命令,并确保您的环境变量实际存在或不存在。如果没有,那么找出原因

答案 1 :(得分:0)

不允许使用括号。

来自https://github.com/docker/distribution/blob/master/docs/spec/api.md

  

存储库名称被分解为路径组件。一个组件   存储库名称必须至少为一个小写,字母数字   字符,可选地用句点,破折号或下划线分隔。   更严格一点,它必须与正则表达式匹配   [A-Z0-9] +(?:[._-] [A-Z0-9] +)*

答案 2 :(得分:0)

我通过移动在工作描述之外执行docker push的位来修复此问题,如下面的yml片段所示:

jobs:
  include:
    - stage: test
      script: sbt clean coverage test coverageReport
    - stage: build docker image
      script:
        - if [ $TRAVIS_BRANCH == "master" ]; then
            sbt docker:publishLocal;
            docker images;
          fi

after_script:
  - if [ $TRAVIS_BRANCH == "master" ]; then echo "Completed building docker image";
      docker login -u $DOCKER_REGISTRY_USERNAME -p $DOCKER_REGISTRY_PASSWORD $DOCKER_REGISTRY_URL;
      docker push $DOCKER_APP_NAME;
    fi
  - echo $TRAVIS_BRANCH

所以早些时候我在jobs stage脚本中有了docker login和docker push命令,我将它移出了一个后脚本来完成这个技巧!