首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复不断重启的docker容器

修复不断重启的docker容器
EN

Stack Overflow用户
提问于 2020-05-14 08:33:38
回答 2查看 307关注 0票数 2

我相信每个人都遇到过这样的情况:有人提交了糟糕的代码,你试图部署你的docker容器,它却一直在重启。今天我又遇到了这个问题,我试着在应用服务器上解决它。我使用以下命令启动了有问题的镜像:

sudo docker run -it --entrypoint /bin/sh (image name) -s

这使我可以输入图像,进行适当的更改,并启动应用程序。我想通过退出容器并运行

sudo docker commit (container id) (tag)

它将允许我保存更改并使用我的部署管道部署更新后的容器。然而,容器却一直在重新启动!我注意到在为有问题的容器运行sudo docker ps时显示的“命令”显示了/bin/sh -s,这是我用来修复有问题的容器的入口点。

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

EN

回答 2

Stack Overflow用户

发布于 2020-05-14 09:21:51

处理这种情况的最好方法是为图像的每个版本提供一个唯一的标记。日期戳或源代码控制提交ID在这里都可以很好地工作。假设您使用的是日期戳:

代码语言:javascript
复制
sudo docker run -d -p ... my/image:20200513
# oops, that crashes

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

代码语言:javascript
复制
# we know this version works
sudo docker run -d -p ... my/image:20200512

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

代码语言:javascript
复制
sudo docker run -d -p ... my/image:0a1b2c3

如果您的CI系统没有构建带标记的映像,您至少可以在源代码控制中返回到昨天的版本并运行:

代码语言:javascript
复制
git log
git checkout 0a1b2c3
sudo docker build -t my/image .
sudo docker run -d -p ... my/image

或者,使用像git revert这样的命令来添加一个新的提交来撤消错误的更改:

代码语言:javascript
复制
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。这可能会修复您的系统实例,但潜在的错误仍将存在于提交的代码中,其他任何人都不会从您的修复中受益。如果您在生产系统上执行此操作,则您的生产系统将运行未经过常规代码审查和测试过程的代码,并且与您的官方代码存储库不匹配。

票数 0
EN

Stack Overflow用户

发布于 2020-05-14 09:27:21

docker commit将运行的容器保存到新的标记中,因此我们可以继续检查它以进行调试。因此,docker commit还保存了您在手动运行容器时所做的入口点更改。

理想情况下,您应该在Dockerfile中更新您的更改/修复,并使用更新的标记构建一个新映像,这样您的入口点将与Dockerfile中提到的相同。

docker commit documentation also mentions to use Dockerfile as right way to manage changes.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61787224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档