在 gitlab 注册表中更改容器名称的正确方法是什么

时间:2021-05-18 19:08:03

标签: docker gitlab gitlab-ci

我正在尝试构建多个 docker 镜像并将它们推送到我的 gitlab 容器注册表。

这很好用,当我像这样构建和推送它们时:

sys.getdefaultencoding()

但是当我尝试根据 Gitlabs Container Registry Naming Convention 更改 stages: - build docker-build-template: # Use the official docker image. image: docker:latest stage: build services: - docker:dind before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY variables: OS_IDENTIFIER: "ubuntu-1604" script: - cp docker/base/ubuntu-1604.dockerfile Dockerfile - docker build --pull -t "${OS_IDENTIFIER}-base${tag}" . - echo $CI_REGISTRY_IMAGE - docker push $CI_REGISTRY_IMAGE 命令时,管道每次都失败,因为它尝试访问不存在的注册表。这是我尝试过但都失败的命令列表。

docker push

上述所有(我尝试了更多组合)都会产生此错误:

- docker push ${CI_REGISTRY_IMAGE}/${OS_IDENTIFIER}-base${tag}
- docker push ${CI_REGISTRY}/$[CI_PROJECT_ROOT_NAMESPACE}/${CI_PROJECT_NAME}
- docker push ${CI_REGISTRY}/$[CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}
- docker push ${CI_REGISTRY}/<my-group>/<my-project>/<image>:latest
- docker push <registry.example.com>/<mynamespace>/<myproject>/<image>:latest

$ docker push <one-of-the-above>:latest An image does not exist locally with the tag: <one-of-the-above> The push refers to repository [<one-of-the-above>] 命令似乎只引用整个存储库,而不是我使用命名约定时的预期。我该如何解决这个问题?我做错了什么?

提前致谢

1 个答案:

答案 0 :(得分:1)

您构建镜像所用的镜像 ID 必须与您推送的镜像 ID 匹配。目前您正在尝试推送您没有的 ID。因此,您需要在构建时使用完整的 id 标记您的图像,因此应该可以使用以下方法:

- docker build --pull -t ${CI_REGISTRY}/<my-group>/<my-project>/<image>:latest .
- docker push ${CI_REGISTRY}/<my-group>/<my-project>/<image>:latest

同样,这里的关键是构建时的 ID 必须与推送时的 ID 完全匹配。命名还需要与您的注册表权限兼容 - 但您应该能够弄清楚这一点。