当 Docker 容器无法正常启动时如何修改配置文件?

贾敕
• 阅读 6318

在容器无法正常启动的情况下,如何修改其配置文件?

问题描述:因为错误的配置文件导致容器运行异常,无法正常启动,通常情况下只有进入容器才能修改配置文件,所以在不能进入容器的情况下该怎么办呢?

这种情况下,有两种方式去修改:

  1. Docker 容器的配置文件一般在 /var/lib/docker/overlay/目录下,可以找到该目录下对应的配置文件进行修改。
  2. 把容器中的配置文件复制到主机中,修改完之后,再移动到容器中。

方式一

  1. 查询日志
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 导致容器无法正常启动。

  1. 查找文件
$ 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 所使用的配置文件。

  1. 修改配置文件
  2. 重启容器即可。

方式二

如果第一种方式没生效,那可以尝试第二种方式。

  1. 复制容器中的配置文件到主机:
# 语法:docker cp <容器名称/容器id>:<配置文件在容器中的路径> <需要复制到主机的路径>

$ docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf ~/mysqld.cnf
  1. 修改主机中的配置文件
  2. 将该配置文件mv 到容器中:
# 语法:docker cp <配置文件在主机中的路径> <容器名称/容器id>:<配置文件在容器中的路径>

$ docker cp ~/mysqld.cnf mysql:/etc/mysql/mysql.conf.d/mysqld.cnf  
  1. 重启配置文件即可。

总结:两种方式均可以有效解决上述问题,当然这类方式仅适用于容器是因错误的配置文件导致无法正常启动的情况。

参考链接

点赞
收藏
评论区
推荐文章
芝士年糕 芝士年糕
2年前
Docker 使用-将容器打成镜像
前言工作中遇到三方闭源的中间件运行起来某项特性不符合需求,但是镜像提供方偏偏又没有将配置文件挂载出来以供修改,这就导致要使软件符合需求地运行只能进入到容器内部修改配置文件后重启,可谓非常之蛋疼。笔者平时对Docker接触不多,好在有同事提到Docker支持将运行中的容器重新打包为镜像,于是网上搜索资料,大致整理出以下步骤解决上面的问题,故有本文聊作记
Easter79 Easter79
3年前
springboot使用之快捷打包部署
本篇关键知识点:Maven的assembly插件实现自定义打包部署(包含依赖jar包) 目前springboot项目的几种常见的部署方式。1\.使用docker容器去部署,将springboot的应用构建成一个dockerimage,然后通过容器去启动镜像,这种方式在
沸腾的木马 沸腾的木马
2年前
关于dorker安装的wordpress无法上传主题和插件的解决办法
首先,容器里居然没有php.ini这个文件。第二,容器里的配置文件无法编辑解决办法在php官网下载php.ini这个文件,修改后通过主机copy到容器里1、要查找容器的名称或ID,可以使用以下命令:dockerps这将显示正在运行的容器的列表,类似于以下示
Stella981 Stella981
3年前
Docker容器使用jenkins部署web项目
(1)需要安装Docker容器,在Docker容器内安装jenkins,gogs,tomcat。  新建maven项目,添加findbugsplugin。使用docker启动jenkins,gogs,Tomcat的命令gogs:dockerrunitdp10022:22p10080:3000restarta
Stella981 Stella981
3年前
Kubernetes Pod的数据卷Volume
概述由于容器本身是非持久化的,因此需要解决在容器中运行应用程序遇到的一些问题。首先,当容器崩溃时,kubelet将重新启动容器,但是写入容器的文件将会丢失,容器将会以镜像的初始状态重新开始;第二,在通过一个Pod中一起运行的容器,通常需要共享容器之间一些文件。Kubernetes通过存储卷解决上述的两个问题。在Docker有存储卷的概念卷,但D
Stella981 Stella981
3年前
Docker面试题
1\.docker如何查看镜像支持的环境变量?   dockerrunIMAFGEenv2\.在使用dockercreate命令创建容器或使用dockerrun创建并运行容器的时候。可以使用m|memory参数来调整容器使用内存的大小。   正确3\.docker需要查询日志应该使用什么命令?   docker
Stella981 Stella981
3年前
HyperLedger Fabric 错误记录
错误1:在阿里云机器上运行环境:signalSIGSEGV:segmentationviolationcode0x1addr0x63pc0x7fecd68ca259需要修改所有相关docker容器yaml文件,在environment中加入image:hyperledger/fabric
Stella981 Stella981
3年前
Docker 常用命令
查看实时日志dockerlogsft容器号tail100进入docker容器dockerexecit容器号bash后台启动dockercompose服务,并查看实时日志dockercomposeupd应用名|dockercompose
Stella981 Stella981
3年前
Docker 容器健康检查
!DOCKERHEALTHCHECK(https://imgblog.csdnimg.cn/20210120134741738.jpg)Docker容器健康检查指的是在Dockerfile中使用HEALTHCHECK指令对容器的运行状态进行检查,并在dockerps的STATUS栏显示healthy/unhealt
Stella981 Stella981
3年前
Docker下MySQL的安装
1概述本文讲述了如何利用Docker去安装MySQL,以及MySQL自定义配置文件的相关设置。2安装Docker首先安装Docker并开启服务:systemctlstartdocker如果没有添加国内源的话建议添加一下,新增/修改/etc/docker/d
3A网络 3A网络
2年前
docker中启动所有的容器命令
docker中启动所有的容器命令前提:在3A服务器上部署docker环境docker中启动所有的容器命令javascriptdockerstart$(dockerpsa|awk'print$1'|tailn2)docker中关闭所有的容器命令javascriptdockerstop$(dockerpsa|a
贾敕
贾敕
Lv1
年年岁岁花相似,岁岁年年人不同。
文章
3
粉丝
0
获赞
0