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

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

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


当前回答

——entrypoint /bin/bash cont_id_or_name

(对于conven,把你的env, vol挂载在docker-compose.yml)

或者使用docker运行并手动指定所有参数

其他回答

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

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

对我来说,Docker总是给人留下这样的印象,它是为一个爱好系统而创建的,它在这方面做得很好。 如果某事失败或不起作用,不要指望有专业的解决方案。

也就是说:Docker不仅不支持这些基本的管理任务,还试图阻止它们。

解决方案:

cd /var/lib/docker/overlay2/ 查找| grep someechangedfile #你现在可以在你的容器中看到一个十六进制编码的文件夹/diff中更改的文件 cd hexcoded-folder / diff 创建一个entrypoint.sh(如果存在,请确保备份一个现有的) Cat > entrypoint.sh #!/bin/bash 在((1));做睡眠1;完成; Ctrl + C Chmod +x入口点。sh 码头工人停止 码头工人开始

你现在有你的docker容器运行一个无限循环,而不是原来的入口,你可以执行bash到它,或做任何你需要的。 停止容器后,删除/重命名自定义入口点。

这并不是你所要求的,但是如果你想要的只是检查文件,你可以在一个停止的容器上使用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构建。

找到停止的容器id

docker ps -a

提交停止的容器:

该命令将修改后的容器状态保存到名为user/test_image的新映像中:

docker commit $CONTAINER_ID user/test_image

使用不同的入口点启动/运行:

docker run -ti --entrypoint=sh user/test_image

入口点参数描述:

https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime

注意:

上面的步骤只是启动一个具有相同文件系统状态的已停止容器。这对快速调查很有帮助;但是环境变量、网络配置、附加卷和其他东西不是继承的。您应该显式地指定所有这些参数。

启动一个停止的容器的步骤已经从这里借来:(最后的评论)https://github.com/docker/docker/issues/18078