在容器无奈失常启动的状况下,如何批改其配置文件?
问题形容:因为谬误的配置文件导致容器运行异样,无奈失常启动,通常状况下只有进入容器能力批改配置文件,所以在不能进入容器的状况下该怎么办呢?
这种状况下,有两种形式去批改:
- Docker 容器的配置文件个别在
/var/lib/docker/overlay/
目录下,能够找到该目录下对应的配置文件进行批改。 - 把容器中的配置文件复制到主机中,批改完之后,再挪动到容器中。
形式一
- 查问日志
docker logs < 容器名称 / 容器 id>
ERROR: mysqld failed while attempting to check config
command was: "mysqld --verbose --help"
2020-09-03T12:15:54.644699Z 0 [ERROR] unknown variable 'realy-log=slave-relay-bin'
2020-09-03T12:15:54.650119Z 0 [ERROR] Aborting
因为异样日志能够得悉是因为我将 relay-log
写成了 realy
导致容器无奈失常启动。
- 查找文件
$ find / -name mysqld.cnf
/var/lib/docker/overlay2/02e1644bc1a4dc1adc9a0300e1815f364416570d69b715fb3b7de0a06cf0c495/diff/etc/mysql/mysql.conf.d/mysqld.cnf
/var/lib/docker/overlay2/02e1644bc1a4dc1adc9a0300e1815f364416570d69b715fb3b7de0a06cf0c495/merged/etc/mysql/mysql.conf.d/mysqld.cnf
/var/lib/docker/overlay2/4f128d7fb1200f722b0d2cfe3606149fe72987a7a16bc78551a2b1fe6c6c6572/diff/etc/mysql/mysql.conf.d/mysqld.cnf
/var/lib/docker/overlay2/a68f1af4adf982b037f1bd37d61082fde1fa2b0e26ea0e2fe146edcb69b198ea/diff/etc/mysql/mysql.conf.d/mysqld.cnf
这里可能会呈现多个配置文件,这是因为每一次重启 Mysql 容器都会保留一个配置文件,所以实践上,间接批改第一个配置文件,就是以后 Mysql 所应用的配置文件。
- 批改配置文件
- 重启容器即可。
形式二
如果第一种形式没失效,那能够尝试第二种形式。
- 复制容器中的配置文件到主机:
# 语法:docker cp < 容器名称 / 容器 id>:< 配置文件在容器中的门路 > < 须要复制到主机的门路 >
$ docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf ~/mysqld.cnf
- 批改主机中的配置文件
- 将该配置文件 mv 到容器中:
# 语法:docker cp < 配置文件在主机中的门路 > < 容器名称 / 容器 id>:< 配置文件在容器中的门路 >
$ docker cp ~/mysqld.cnf mysql:/etc/mysql/mysql.conf.d/mysqld.cnf
- 重启配置文件即可。
总结:两种形式均能够无效解决上述问题,当然这类形式仅实用于容器是因谬误的配置文件导致无奈失常启动的状况。
参考链接
- Docker 批改无奈启动的容器的配置文件