Docker公共注册表推送失败:存储库不存在

问题描述 投票:50回答:6

我正在尝试将我的docker镜像推入公共docker注册表:

$ docker login
Username (binarybana): 
WARNING: login credentials saved in /home/jknight/.dockercfg.
Login Succeeded

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
binarybana/dev-fedora   latest              10c7881fbaca        24 hours ago        1.148 GB
binarybana/fedoradev    latest              10c7881fbaca        24 hours ago        1.148 GB
binarybana/fedora-dev   latest              10c7881fbaca        24 hours ago        1.148 GB
<none>                  <none>              b44397dc4c99        24 hours ago        1.148 GB
<none>                  <none>              a98c27ba4738        24 hours ago        1.141 GB
<none>                  <none>              775c74a34add        24 hours ago        1.141 GB
<none>                  <none>              2be2491d2354        24 hours ago        1.141 GB
docker.io/fedora        21                  93be8052dfb8        7 days ago          241.3 MB

$ docker push binarybana/dev-fedora

Do you really want to push to public registry? [Y/n]: Y
The push refers to a repository [docker.io/binarybana/dev-fedora] (len: 0)
FATA[0001] Repository does not exist: docker.io/binarybana/dev-fedora 

$ docker push binarybana/fedora-dev

Do you really want to push to public registry? [Y/n]: Y
The push refers to a repository [docker.io/binarybana/fedora-dev] (len: 0)
FATA[0002] Repository does not exist: docker.io/binarybana/fedora-dev 

然而,我已经创建了存储库(可查看的here)。我还试图推送到我尚未创建的存储库名称(上例中的第一次尝试)。

我认为(len:0)与它有关,但我不能谷歌。我最初也是从dockerfile创建的图像:

docker build -t binarybana/fedora-dev .

谢谢。

docker docker-registry
6个回答
117
投票

始终使用“用户名”和“标记”构建您的图像

docker build -t <username>/dev-fedora:latest .

建立后推动图像

docker push <username>/dev-fedora:latest


20
投票

如果你使用docker.io(dockerhub repo),你需要标记它,包括名称docker.io。

docker tag ${image_id} docker.io/${login_name}/${image_name} 

然后

docker push docker.io/${login_name}/${image_name} is OK

8
投票

如果您使用的是亚马逊AWS,则在将Docker映像推送到Amazon ECR之前,您需要创建一个存储库以存储它们。您可以使用AWS管理控制台或AWS CLI和AWS开发工具包创建Amazon ECR存储库。

创建存储库

1.)在https://console.aws.amazon.com/ecs/打开Amazon ECS控制台。

2.)在导航栏中,选择要在其中创建存储库的区域。

3.)在“存储库”页面上,选择“创建存储库”。

4.)对于存储库名称,输入存储库的唯一名称,然后选择下一步。

5.)现在您应该能够推送到您的AWS回购!


7
投票

在尝试将图像推送到Repository does not exist: gcr.io/my-project-id/my-container时,我也遇到了这个错误Google Container Registry

我的困惑来自于对Docker对“存储库”的定义的误解。

存储库是一组Docker镜像。可以通过将存储库推送到注册表服务器来共享存储库。可以使用标记标记存储库中的不同图像。

当Docker说存在一个存储库时,这意味着它没有可以在本地找到的图像,即taggedregistry.host/user-name/image-name组合。

注意:Docker Hub注册表是default,因此如果你推动那部分可以省略。

解决此问题的步骤:

  1. 仔细检查您在本地可用的图像。 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE gcr.io/my-proj/my-typo v1 40c2ae2dedb8 2 days ago 427.8 MB
  2. 如果有拼写错误,您可以运行docker tag命令来修复它。 $ docker tag gcr.io/my-proj/my-typo:v1 gcr.io/my-proj/my-cntr:v1
  3. 现在,您应该能够使用完整名称(包括标记)来推送图像。 $ docker push gcr.io/my-proj/my-cntr:v1 注意:如果您要推送到Google容器注册表,请使用gcloud docker -- push而不是docker push

4
投票

您需要使用完整的图像名称。当你在建造时没有指定标签时,它是latest,所以你应该说

docker push binarybana/fedora-dev:latest

0
投票

添加到Santosh Gandhe的答案,如果你想推送到特定的存储库而不是你的登录名

docker tag ${image_name} docker.io/${login_name}/${remote_repo_name}:${image_name} 然后 docker push docker.io/${login_name}/${remote_repo_name}:${image_name}

另外,不要忘记先做docker login

© www.soinside.com 2019 - 2024. All rights reserved.