我有一个运行mongoDB的docker容器无法启动。我搜索并意识到这是由于mongoDB无法在容器中启动而引起的。
搜索后,使mongoDB重新工作的解决方案似乎非常简单,如以下响应所示:MongoDB Failing to Start - ***aborting after fassert() failure。 显然,我要做的就是删除导致mongoDB崩溃的文件: /tmp/mongodb-27017.sock 。
我已经看到了可以在容器docker exec -t -i mycontainer /bin/bash
中访问shell的响应,但是该容器必须正在运行。
如果容器未运行,是否可以删除特定文件?
答案 0 :(得分:0)
要将命令运行到已停止的容器中,您可以做的是:
但是从技术上讲,这是一个不好的做法。容器应该是不变的,您可以重新创建容器。如果文件位于持久卷中,则docker commit解决方案仍然可以正常工作,并将该卷装载到另一个容器上并从那里开始工作。
所以我们做吧:
#vibrant_tu being the name of a stopped container I have
$ docker commit vibrant_tu
sha256:3381382dc88be0955b76439a74e7d6c41b41ae7217a807d20c4bc92d55e76093
$ docker run -ti 3381382dc88be0955b76439a74e7d6c41b41ae7217a807d20c4bc92d55e76093 sh
# #Do what you want to do in the shell like deleting the file then exit
请注意,如果没有卷,则仅在新容器中进行修改:
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30c3bee77ed2 3381382dc88b "sh" 2 minutes ago Exited (0) 2 minutes ago epic_williamson
$ docker start 30c3bee77ed2
但是,如果计划不修改卷数据,那么这样做根本就没有意义,您可能只是创建了另一个容器。
当需要使用外壳检查停止的容器时,此技巧仍然很有用。