01-Docker 修改无法启动的容器中的内容

1、背景

我们可能会碰到这样一个问题,在容器执行过程中,修改了容器的内容(如配置文件信息),但因为修改出了问题。导致容器关闭后,无法启动。

这时需要重新修改配置文件。正常情况下可以通过 docker exec 命令打开容器的一个shell终端进去修改。但这时容器已经无法启动了。这时该如何处理呢?

解决方案

有以下解决方案

2.1 方案一:创建新镜像

把这个问题容器用 docker commit 提交到一个新的镜像,然后用 docker run -it 基于新镜像运行一个新的容器进去改变(修复)配置文件。

再通过新的容器再提交一个新的镜像,然后在基于新的镜像重新启动容器(同最初的容器)。

这个方法是可行的,但问题是步骤多,而且提交了新的镜像,对于后续维护增加了复杂性。

2.2、方案二:直接修改容器的文件

运行命令 docker inspect [CONTAINER ID] ,可以找到如下的内容

1
2
3
4
5
6
7
8
...
"GraphDriver": {
"Data": {
"LowerDir": "/var/xxx/docker/overlay2/xxx4679a26b20bc9808a66d1406ecd8c759d2596c4ea9ad9d1bf2ee96-init/diff:/var/idsmp/docker/overlay2/d48a5eabcfa721074f9ca3d7085d6270176921cedac7f8e7d917ae7e342d232d/diff:/var/idsmp/docker/overlay2/2572dba9dc4f61570301c26f65a4c6434037bca83961bc1655986340806baf3f/diff:/var/idsmp/docker/overlay2/d16f180d5602252829e6b0ee9e62f6abb4297b4d29bea8f34617eb4283abf0a8/diff:/var/idsmp/docker/overlay2/1e8b6ad160c98181f3b71b50ac556e2794aebd9497aa8422eddde1a5c277b449/diff:/var/idsmp/docker/overlay2/48fab718f4835baab5ef8022fb87e4428e19745fde75b5ece06d967a5b7d16a3/diff:/var/idsmp/docker/overlay2/83860c35a8361e67ad8cfe58137fd0fa0c308eed3b99da90672d71f2200ef671/diff",
"MergedDir": "/var/xxx/docker/overlay2/xxx679a26b20bc9808a66d1406ecd8c759d2596c4ea9ad9d1bf2ee96/merged",
"UpperDir": "/var/xxx/docker/overlay2/xxx679a26b20bc9808a66d1406ecd8c759d2596c4ea9ad9d1bf2ee96/diff",
"WorkDir": "/var/xxx/docker/overlay2/xxxa679a26b20bc9808a66d1406ecd8c759d2596c4ea9ad9d1bf2ee96/work"
...

cd到 MergedDir , 你会惊奇的发现,他和我们容器里的目录结构是一样的.

这样我们就可以在前者中,也就是在容器已经 “exit” 的情况下,修改容器中的配置文件, 修改完成后重启容器.

2.3、方案三:把文件拷贝出来

把docker容器中的配置文件复制到主机中,然后在主机中修改,修改完成后再复制到docker容器中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. 复制docker容器的文件到主机中
# docker cp [容器id]:docker容器中配置文件路径 主机路径
docker cp mysql:/etc/mysql/my.cnf /home/my.cnf


# 2. 修改配置文件中出错的部分


# 3. 配置文件到docker容器中
# docker cp 主机文件路径 容器id:docker容器中配置文件路径
docker cp /home/my.cnf mysql:/etc/mysql/my.cnf


4. 重启容器
docker start containerID

01-Docker 修改无法启动的容器中的内容
https://flepeng.github.io/042-云原生-01-Docker-01-Docker-修改无法启动的容器中的内容/
作者
Lepeng
发布于
2023年3月9日
许可协议