【问题标题】:Docker runs old container instead of new one that I'm pulling (AWS)Docker 运行旧容器而不是我正在拉的新容器(AWS)
【发布时间】:2020-03-31 18:13:11
【问题描述】:

我最近使用 Docker 将 Springboot 应用程序部署到 AWS。

我想更新我的图像/容器快疯了。我已经尝试删除所有内容,使用和未使用的容器、图像、标签等,然后再次推送所有内容。 Docker system prune、docker rm、docker rmi,也使用不同的帐户……它仍然运行旧版本的项目。

这一切都表明服务器级别发生了一些事情。我正在使用腻子。

非常感谢您的帮助。

【问题讨论】:

  • 您能否举一个具体的例子说明一系列不起作用的命令,以及您实际看到的效果?

标签: image amazon-web-services docker containers putty


【解决方案1】:

旧容器是什么意思?是您从某些版本控制中进行的一些更改然后没有在容器上更新?或者只是做 docker restart container Id

【讨论】:

  • 旧容器是指我第一次成功执行 docker run 的项目版本。然后进行了一些更改,但没有反映出来,因为每次我执行 docker run 时都会出现这个旧版本。
  • 如果托管在某个服务器上 ssh 到服务器然后 cd 到您的项目并 git pull。尝试再次运行它
【解决方案2】:

这里有很多东西要解压,所以如果您能提供更多信息,那就太好了。但这里有一个可能的共同点。

如果您使用任何 AWS 服务(EKS、Farget、ECS),这些服务仅基于您提供的 docker 映像。因此,如果您的图像未正确更新,它们将不会更新。

但是docker run 也会出现同样的情况。如果你一直指向同一张图片(或者图片在概念上没有改变),那么你不会有任何变化。

所以我怀疑问题出在 Docker 或 AWS 内部。

最有可能

  1. 您不会在每次更改时重新构建 Spring 应用程序二进制文件

  2. 您的 Dockerfile 拉入了错误的二进制文件

  3. 如果您使用的是图像托管服务,例如 ECR 或 Nexus,那么您需要确保图像名称指向正确的 image:tag 组合。如果您更新图像,它应该被赋予一个唯一标签,然后是 Docker/AWS 引用的标记图像

构建映像后,您可以使用 docker export <container_id> | tar -xf - <location_of_binary_in_image_filesystem> 验证是否复制了正确的二进制文件

这将提取二进制文件。然后你可以在本地运行它来测试它是否是你想要的。

您可以使用docker export <container_id> | tar -tf - | less查看整个文件系统

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 2020-09-07
    • 2022-10-04
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多