我有一个试图推送到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
答案 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命令,我将它移出了一个后脚本来完成这个技巧!