背景:目前有一个简单的MySQL8容器,端口映射错误、文件挂载没做。
需求:动态修改容器相应属性配置
实现方案:直接修改容器配置文件,重启容器
实现步骤:
docker ps -a
创建docker容器文件临时存放目录,创建mysql配置文件存放目录
mkdir -p /tmp/docker/containers
mkdir -p /etc/mysql
复制原有容器所有文件至新目录下
# 复制旧有文件到临时目录下
cp -r /var/lib/docker/containers /tmp/docker/containers
# 复制旧有文件到备份目录下
cp -r /var/lib/docker/containers /tmp/docker/containers_bak
cd /tmp/docker/containers
由于容器实际名字很长,所以docker查看指令是截取了一截的,我们能够确认就行。
编写配置文件复制脚本 update_mysql_conf.sh
vim update_docker_mysql_conf.sh
脚本内容
cp -r /tmp/docker/containers/3cb49e5500c3ed4fd8ff4e48e303668c97cbc7732f02195806c87f0e3687604d/config.v2.json /var/lib/docker/containers/3cb49e5500c3ed4fd8ff4e48e303668c97cbc7732f02195806c87f0e3687604d/config.v2.json cp -r /tmp/docker/containers/3cb49e5500c3ed4fd8ff4e48e303668c97cbc7732f02195806c87f0e3687604d/hostconfig.json /var/lib/docker/containers/3cb49e5500c3ed4fd8ff4e48e303668c97cbc7732f02195806c87f0e3687604d/hostconfig.json
关闭容器(必须执行)此处如果是在hyper-V容器虚拟机的化,建个检查点备份最为稳妥
# 查询正在运行的容器 docker ps # 一个一个关闭所有容器 docker stop [容器id] # 验证是否有漏网之鱼没有关闭 docker ps # 关闭容器服务 systemctl stop docker
授予脚本执行权限、执行脚本复制配置文件
chmod +x update_mysql_conf.sh
./update_mysql_conf.sh
修改端口映射配置
修改hostconfig.json文件的PortBindings配置,把文件类容复制出来,浏览器打开一个json校验网站:bejson.com、json.cn
修改文件挂载配置(本人使用该方案没有生效,而另外一种基于已有容器生成新的镜像的不建议使用。)
此处修改配置文件挂载失败。可以尝试先找到容器内的文件在宿主的未知后,然后建立软链接。
文件位置查找指令:docker inspect 容器Id
- 修改hostconfig.json文件的Binds配置
- 修改config.v2.json文件的MountPoints添加一个配置
执行配置文件移动脚本,直接执行启动mysql容器指令(该指令在docker容器关闭的情况下会自动先启动docker容器)
/tmp/docker/containers/update_docker_mysql_conf.sh
docker stop mysql
检验:通过3306端口连接mysql,连接成功