我想用一个不同的命令来启动一个停止的Docker容器,因为默认命令会崩溃——这意味着我不能启动容器,然后使用' Docker exec'。
基本上,我想启动一个shell,这样我就可以检查容器的内容。
幸运的是,我创建了带有-it选项的容器!
我想用一个不同的命令来启动一个停止的Docker容器,因为默认命令会崩溃——这意味着我不能启动容器,然后使用' Docker exec'。
基本上,我想启动一个shell,这样我就可以检查容器的内容。
幸运的是,我创建了带有-it选项的容器!
当前回答
——entrypoint /bin/bash cont_id_or_name
(对于conven,把你的env, vol挂载在docker-compose.yml)
或者使用docker运行并手动指定所有参数
其他回答
对我来说,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容器,MariaDB容器在启动时不断崩溃,因为损坏了InnoDB表。
我解决问题的方法是:
从容器中复制docker-entrypoint.sh到本地文件系统(docker cp) 编辑它以包含所需的命令行参数(在我的例子中——innodb-force-recovery=1) 将编辑过的文件复制回docker容器,覆盖现有的入口点脚本。
我的问题:
我用docker run <IMAGE_NAME>启动了一个容器 然后将一些文件添加到这个容器中 然后我关闭了容器,并尝试使用与上面相同的命令再次启动它。 但当我检查新文件时,它们不见了 当我运行docker ps -a时,我可以看到两个容器。 这意味着每次我运行docker run <IMAGE_NAME>命令时,都会创建新的映像
解决方案: 要在最初创建的容器上运行,请执行以下步骤
Docker ps获取你的容器的容器 docker容器start <CONTAINER_ID>启动现有容器 然后你可以从你离开的地方继续。例如:docker exec -它<CONTAINER_ID> /bin/bash 然后,您可以决定从中创建一个新映像
我把@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构建。
这并不是你所要求的,但是如果你想要的只是检查文件,你可以在一个停止的容器上使用docker export。
mkdir $TARGET_DIR
docker export $CONTAINER_ID | tar -x -C $TARGET_DIR