gpt4 book ai didi

Docker 镜像未从 dockerhub.com 注册表中提取最新版本

转载 作者:行者123 更新时间:2023-12-02 11:53:30 25 4
gpt4 key购买 nike

我在实现CI/CD流水线的时候,是用docker、kubernetes和jenkins来实现的。我正在将生成的 Docker 镜像推送到 Dockerhub 存储库。

当我拉取时,它并没有从 Dockerhub.com 注册表中拉取最新的。所以它没有在我的应用程序中显示更新的响应。我添加了 testdeployment.yaml 文件,如下所示。存储库凭证仅存储在 Jenkinsfile 中。

spec:
containers:
- name: test-kube-deployment-container
image: "spacestudymilletech010/spacestudykubernetes:latest"
imagePullPolicy: Always
ports:
- name: http
containerPort: 8085
protocol: TCP

Jenkins 文件

 sh 'docker build -f /var/lib/jenkins/workspace/jpipeline/pipeline/Dockerfile -t spacestudymilletech010/spacestudykubernetes:latest /var/lib/jenkins/workspace/jpipeline/pipeline'
sh 'docker login --username=<my-username> --password=<my-password>'
sh 'docker push spacestudymilletech010/spacestudykubernetes:latest'

我如何确定它没有从 Dockerhub.com 拉取最新镜像的原因?

最佳答案

看起来你在重复推送 :latest 到 dockerhub?

如果是这样,那么这就是您遇到问题的原因。您从 Jenkins 作业将最新推送到中心,但如果运行部署 pod 的 k8s 节点已经有一个名为 latest 的标签存储在本地,那么它将使用该标签。

澄清一下 - latest 只是一个字符串,它同样可以是 foobar。这实际上并不意味着 docker 将拉取最新版本的容器。

这里有两个要点:

  • 在 k8s 中使用 latest 几乎总是一个非常糟糕的主意。
  • 多次推送同一个标签总是一个坏主意,事实上许多 repo 不允许你这样做。

关于完全使用 latest。这来自个人经验,在我工作的地方,在我们采用 k8s 的早期,我们到处都在使用它。直到有一天我们发现我们的人偶服务器不再工作了。在调查中,我们发现该节点已经死亡,pod 在另一个节点上重新旋转,并且拉出了一个不同的 latest,这是一个新的主要版本,破坏了一切。

这并不明显,因为 kubectl describe pod 显示了与之前相同的标签名称,所以显然没有任何变化。

补充一下评论中提到的一个极好的点:你有 ImagePullPolicy: 'Always',但如果你正在执行 kubectl apply -f mypod.yaml,使用相同的标签名称,k8s 无法知道你'实际上已经更改了图像

关于Docker 镜像未从 dockerhub.com 注册表中提取最新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58539362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com