我正在尝试将图像推送到在 minikube 中运行的本地注册表,但出现以下错误:
Successfully built ee84225eb459
Successfully tagged user/apiserver:0.0.1
$ docker push localhost:5000/user/apiserver:0.0.1
The push refers to a repository [localhost:5000/user/apiserver]
An image does not exist locally with the tag: localhost:5000/user/apiserver
我已经尝试使用以下方法启动 minikube:
minikube start --vm-driver xhyve --insecure-registry localhost:5000
eval $(minikube docker-env)
你需要tag和push图像。标记图像时,可以使用图像标识符 (imageId)。当使用 docker images 显示所有图像列表时,它会被列出。 用于创建标签的语法和示例(使用 imageId)是:
docker tag <imageId or imageName> <hostname>:<repository-port>/<image>:<tag>
docker tag af340544ed62 example.com:18444/hello-world:mytag
一旦成功创建相当于一个版本的标签,您可以使用 docker images 确认其创建并使用语法发出 push:
docker push <hostname>:<repository-port>/<image>:<tag>
我遇到了同样的错误,OP 指的是谷歌搜索将我带到这里的确切短语,但就我而言,我将其推送到默认/公共存储库 (hub.docker.com) 而不是本地存储库.但事实证明问题是一样的
这是我在磁盘上创建的本地映像
[root@ip-172-31-22-195 centos]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 927311af2297 20 hours ago 193MB
我这样标记它:
docker tag centos devopskalsym:latest
然后确认正在创建的标签:
[root@ip-172-31-22-195 centos]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
devopskalsym latest 927311af2297 20 hours ago 193MB
centos latest 927311af2297 20 hours ago 193MB
由于我在 docker hub 上的存储库是:devopskalsym/centos7,我尝试推送它:
docker push devopskalsym/centos7:latest
得到错误:
[root@ip-172-31-22-195 centos]# docker push devopskalsym/centos7:latest
The push refers to repository [docker.io/devopskalsym/centos7]
An image does not exist locally with the tag: devopskalsym/centos7
所以我删除了标签:
[root@ip-172-31-22-195 centos]# docker rmi devopskalsym
Untagged: devopskalsym:latest
然后用@BMitch提到的格式重新正确标记
docker tag centos:latest devopskalsym/centos7:latest
使用的格式是这样的:
docker tag local-image:tagname new-repo:tagname
现在它可以正确显示图像:
[root@ip-172-31-22-195 centos]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
devopskalsym/centos7 latest 927311af2297 20 hours ago 193MB
centos latest 927311af2297 20 hours ago 193MB
然后再推一下:
docker push devopskalsym/centos7:latest
成功了
[root@ip-172-31-22-195 centos]# docker push devopskalsym/centos7:latest
The push refers to repository [docker.io/devopskalsym/centos7]
b7d51bf3d09e: Pushing [==================================> ] 132MB/193.3MB
注意:您可能需要使用
docker login
登录
Successfully tagged user/apiserver:0.0.1
docker push localhost:5000/user/apiserver:0.0.1
图像标签需要包含注册表名称/端口,以便您将它们推送到默认注册表(docker hub)以外的任何地方。所以你需要将你的图像标记为
localhost:5000/user/apiserver:0.0.1
而不是user/apiserver:0.0.1
。然后你就可以推送到你的本地注册表。
我有一张图片
trip-bot latest 0c9e8f0367bc 36 minutes ago 955MB
我得到了错误
推送参考仓库[docker.io/ilkhr/trip-bot] 本地不存在标签为:ilkhr/trip-bot
的图像
这样解决了问题
$ docker tag 0c9e8f0367bc ilkhr/trip-bot:trip-bot
之后我就这样做了
$ docker push ilkhr/trip-bot:trip-bot
首先使用这些命令从 docker login 开始:-
docker login
然后通过这个命令检查你的图像ID/标签
docker images
一旦你得到你的图像 ID/标签,然后使用这个命令推送到你的 dockerhub 存储库
docker tag <imageId or tag> <dockerhub id>/<imagename>:<tag>
或者一般情况下你可以使用
docker tag <imageId or tag> <hostname>:<repository-port>/<imagename>:<tag>
注意用您的具体信息替换尖括号
如果您尝试推送到 docker hub 并出现此标记错误,请记住,在构建映像的那一刻,您应该说明您的 docker hub 帐户的用户名,以便正确推送它。
所以在我的例子中,正确的命令是
docker image build -t marcofloriano/hello-docker .
而不是
docker image build -t hello-docker .
正如其他人所说,问题是通常是由于不正确的标记。
这里是一个 将 docker 部署到 DockerHub 的工作示例。
标签格式为
<namespace>/<repo_name>:<version>
。命名空间通常存储在存储库机密中。请注意,在构建时分配标签很方便.
name: Docker Image CI
on:
push:
branches: [ "feature/docker_image" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Log in to DockerHub
env:
DOCKER_USER: ${{secrets.DOCKER_USER}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
- name: Build the Docker image
run: docker build . --file Dockerfile --tag ${{secrets.DOCKER_USER}}/jupyter-book-extentensions:latest
- name: Push the Docker image
run: docker push ${{secrets.DOCKER_USER}}/jupyter-book-extentensions:latest