Docker:在停止的容器中编辑“ my.cnf”文件

时间:2019-04-08 20:37:40

标签: mysql docker

在对“ my.cnf”进行编辑后,当我尝试启动容器时,我现在在Mac上从Kitematic收到一个错误:

mysqld: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 19! mysqld: 
        [ERROR] Fatal error in defaults handling. Program aborted!

我尝试通过以下方式访问容器:

docker exec -it [container] bash

...但是我得到了错误:

Error response from daemon: Container [container] is not running

我能够通过图像访问某物,但是文件看起来并不相同,所以我不确定发生了什么(我不太熟悉Docker。 )。

在此阶段,进行适当的编辑并修复容器,或者以某种方式将MySQL数据克隆到另一个容器将是理想的选择。

2 个答案:

答案 0 :(得分:2)

要修复my.cnf,可以使用docker container cp。它适用于停止的容器。 试试

docker container cp [container]:/etc/mysql/my.cnf container-my.cnf

然后编辑container-my.cnf并复制回去:

docker container cp container-my.cnf [container]:/etc/mysql/my.cnf

要在新容器中使用现有的MySQL数据,

docker container inspect -f '{{.Mounts}}' [container]

为您提供数据所在的卷名(键volume)。然后启动一个新的mysql容器,并将卷安装在/var/lib/mysql下:

docker container run -d -v [volume_name]:/var/lib/mysql [image]

此后,您可以删除旧容器(实际上您可以在创建新容器之前将其删除)

答案 1 :(得分:1)

如果您使用的是来自

的官方 mysql docker 镜像

https://hub.docker.com/_/mysql

您可以使用覆盖 my.cnf 的自定义 MySQL 配置文件

如果/my/custom/config-file.cnf是你自定义配置文件的路径和名字,你可以这样启动你的mysql容器(注意这个命令只使用了自定义配置文件的目录路径):

$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e  MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

这将启动一个新容器 some-mysql,其中 MySQL 实例使用来自 /etc/mysql/my.cnf 和 /etc/mysql/conf.d/config-file.cnf 的组合启动设置,以及来自后者优先。