背景:目前有一個簡單的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,連接成功

