我想用一个不同的命令来启动一个停止的Docker容器,因为默认命令会崩溃——这意味着我不能启动容器,然后使用' Docker exec'。

基本上,我想启动一个shell,这样我就可以检查容器的内容。

幸运的是,我创建了带有-it选项的容器!


当前回答

编辑这个文件(对应于你停止的容器):

vi /var/lib/docker/containers/923...4f6/config.json

更改“Path”参数以指向您的新命令,例如/bin/bash.你也可以设置"Args"参数来给命令传递参数。

重新启动docker服务(注意,这将停止所有正在运行的容器,除非你首先启用live-restore):

service docker restart

列出你的容器,并确保命令已经更改:

docker ps -a

启动容器并连接到它,您现在应该在您的shell中!

docker start -ai mad_brattain

使用Docker 1.7.1在Fedora 22上工作。

注意:如果你的shell不是交互式的(例如,你没有创建带有-it选项的原始容器),你可以将命令改为“/bin/sleep 600”或“/bin/tail -f /dev/null”,以给你足够的时间执行“docker exec -it CONTID /bin/bash”作为另一种获得shell的方式。

注2:更新版本的docker有config.v2。json,在那里你需要改变入口点或Cmd(感谢user60561)。

其他回答

我找到了一个简单的命令

docker start -a [container_name]

这样就可以了

Or

docker start [container_name]

then

docker exec -it [container_name] bash

我的问题:

我用docker run <IMAGE_NAME>启动了一个容器 然后将一些文件添加到这个容器中 然后我关闭了容器,并尝试使用与上面相同的命令再次启动它。 但当我检查新文件时,它们不见了 当我运行docker ps -a时,我可以看到两个容器。 这意味着每次我运行docker run <IMAGE_NAME>命令时,都会创建新的映像

解决方案: 要在最初创建的容器上运行,请执行以下步骤

Docker ps获取你的容器的容器 docker容器start <CONTAINER_ID>启动现有容器 然后你可以从你离开的地方继续。例如:docker exec -它<CONTAINER_ID> /bin/bash 然后,您可以决定从中创建一个新映像

大多数情况下,人们在修改配置文件时会遇到这种情况,我就是这样做的。我试图通过Vue SPA作为入口点绕过PHP/Apache服务器的CORS。不管怎样,如果你知道你要的文件,对我来说一个简单的解决办法是

复制你从图片中取出的文件: Docker cp bt-php:/etc/apache2/apache2.conf。 局部修复 复制回来 Docker cp apache2.conf bt-php:/etc/apache2 .conf 重新启动容器 *加分-由于这个文件正在修改,将其添加到您的撰写或构建脚本,这样当您做对了,它将被烘焙到图像!

这并不是你所要求的,但是如果你想要的只是检查文件,你可以在一个停止的容器上使用docker export。

mkdir $TARGET_DIR
docker export $CONTAINER_ID | tar -x -C $TARGET_DIR

我把@Dmitriusan的回答变成了一个别名:

别名docker-run- prer -container='prev_container_id="$(docker ps -aq | head -n1)"&& docker commit "$prev_container_id" && docker run -it——entrypoint=bash "prev_container/$prev_container_id"

将此添加到~/中。Bashrc别名文件,你会有一个漂亮的新docker-run- prec -container别名,它会把你放到前一个容器的shell中。

有助于调试失败的docker构建。