gpt4 book ai didi

docker - 修复不断重启的Docker容器

转载 作者:行者123 更新时间:2023-12-02 18:34:38 26 4
gpt4 key购买 nike

我确定每个人都处在有人提交错误代码的位置,您尝试部署Docker容器,并且它一直在重新启动。今天,我又遇到了这个问题,并尝试在应用服务器本身上解决它。我使用以下命令启动了故障图像:
sudo docker run -it --entrypoint /bin/sh (image name) -s
这使我可以输入图像,进行适当的更改,然后启动应用程序。我以为通过退出容器并运行
sudo docker commit (container id) (tag)
这将允许我保存更改并使用部署管道来部署更新的容器。但是,容器再次重新启动!我注意到为有问题的容器运行sudo docker ps时显示的“命令”显示为/bin/sh -s,这是我用来修复故障容器的入口点。

所以我的问题是-我应该如何处理这种情况?是否可以直接输入重新启动的镜像,还是可以按照我尝试的过程进行操作?如果是这样,我如何在保留docker命令启动应用程序的同时正确提交它?谢谢!

最佳答案

应对这种情况的最佳方法是为图像的每个版本赋予唯一的标签。日期戳或源控件提交ID在这里都可以正常工作。假设您使用日期戳:

sudo docker run -d -p ... my/image:20200513
# oops, that crashes

然后,很容易运行昨天的构建:

# we know this version works
sudo docker run -d -p ... my/image:20200512

如果您使用的是源代码控制ID,则需要运行 cvs / git / hg / svn log来查找先前的提交ID,但是相同的基本技术可以工作

sudo docker run -d -p ... my/image:0a1b2c3

如果您的CI系统没有构建带标签的图像,则至少可以在源代码管理中返回到昨天的版本并运行该版本:

git log
git checkout 0a1b2c3
sudo docker build -t my/image .
sudo docker run -d -p ... my/image

或者,使用 git revert之类的东西来添加一个新的提交,以撤消错误的更改:

git log
git revert 4d5e6f7
git push
# wait for the CI system to do its thing
sudo docker pull my/image
sudo docker run -d -p ... my/image

您不应该尝试直接编辑容器中的代码或使用 docker commit。这可能会修复您的系统实例,但是潜在的错误仍将存在于已提交的代码中,并且其他人也不会从您的修复中受益。如果您在生产系统上执行此操作,则您的生产系统将运行未经过常规代码审查和测试过程且与您的官方代码存储库不匹配的代码。

关于docker - 修复不断重启的Docker容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61787224/

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