
A server 是一個容器、我通過 commit 生成鏡像,然后在把鏡像save打包成一個壓縮包。
B server 是一個容器、是通過A server打包的鏡像生成的、卻少了幾個資料庫,這是怎么回事?
其中 B Server中的 shoe 也是我自己的資料庫、卻打包成功了,其它標紅的卻沒有。
uj5u.com熱心網友回復:
容器已經 stop、commit 之后、執行新的鏡像、發現也沒有那幾個資料庫uj5u.com熱心網友回復:
shoe這個資料庫是我run鏡像的時候加的:
-e MYSQL_DATABASE=shoe
其它的資料庫都是我手動在資料庫里面創建的、不會和這個有關系吧
uj5u.com熱心網友回復:
docker inspect A 看下詳情唄uj5u.com熱心網友回復:
看詳情、主要是看什么
uj5u.com熱心網友回復:
1、你的mysql鏡像是自己構建的還是官方構建的2、你標紅的資料庫是否有資料
3、你啟動B的時候為什么加-e 這個引數,不加-e試試
4、你啟動B的時候把 -e MYSQL_DATABASE設定成你標紅的三個資料庫
uj5u.com熱心網友回復:
1、A 是網易鏡像拉取的
2、有資料、是在run完容器時候、手動create 的資料庫
3、-e 是啟動 A 的時候加的、因為我運行容器的時候就需要那個資料庫
4、如果B 啟動的時候加 -e 會覆寫掉我原先創建的資料庫
uj5u.com熱心網友回復:
1、查看a的dockerfile看和普通構建mysql是否一樣2、docke的檔案系統ufw聯合式檔案系統,加-e 即使容器關閉,只要重啟就會重新加載
3、重啟容器a,看看是否有ecshop,xcp
建議:
如果是公司使用建議自己構建鏡像,對于關鍵資料用volume備份
uj5u.com熱心網友回復:
1、a 是直接從蜂巢鏡像拉取下來的
2、不太明白
3、重啟a、這兩個資料庫依然存在,不會消失
uj5u.com熱心網友回復:
你啟動b時候的命令是什么
uj5u.com熱心網友回復:
1、查看a的dockerfile看和普通構建mysql是否一樣
2、docke的檔案系統ufw聯合式檔案系統,加-e 即使容器關閉,只要重啟就會重新加載
3、重啟容器a,看看是否有ecshop,xcp
建議:
如果是公司使用建議自己構建鏡像,對于關鍵資料用volume備份
1、a 是直接從蜂巢鏡像拉取下來的
2、不太明白
3、重啟a、這兩個資料庫依然存在,不會消失
你啟動b時候的命令是什么
1、你的鏡像應該是官方的鏡像,官方修改了mysql,下面是mysql鏡像i1啟動mysql的腳本,
https://github.com/docker-library/mysql/blob/master/8.0/docker-entrypoint.sh
2、當你創建容器的時候就會執行這個腳本
你通過-e這個引數設定了環境變數
你設定MYSQL_DATABASE這個引數
3、當你提交成鏡像時會保存環境變數
4、當你啟動b的時候,會執行這個腳本,由于環境變數中有MYSQL_DATABASE的配置,會創建這個資料庫,
問題排查
1、查看b的日志是否會初始化資料庫
2、查看mysql的日志是否對資料進行操作
3、查看資料庫的是否有資料,select 命令
uj5u.com熱心網友回復:
問題排查
1、查看b的日志是否會初始化資料庫
2、查看mysql的日志是否對資料進行操作
3、查看資料庫的是否有資料,select 命令
我的鏡像是網易蜂巢mysql鏡像、地址如下:
https://c.163.com/hub#/m/repository/?repoId=2955
1、并沒有初始化、還存留我在a 的操作資料。
2、有a操作記錄日志
3、有a的資料
啟動命令為:
docker run -d --name mysql -p 3306:3306 b/mysql
因為在a 的時候我就指定了root帳號、以及創建了我的資料庫、所以我在b的時候就只運行不做其它引數操作
uj5u.com熱心網友回復:
不太清楚別人對資料庫做了哪些改動
問題排查
1、查看b的日志是否會初始化資料庫
2、查看mysql的日志是否對資料進行操作
3、查看資料庫的是否有資料,select 命令
我的鏡像是網易蜂巢mysql鏡像、地址如下:
https://c.163.com/hub#/m/repository/?repoId=2955
1、并沒有初始化、還存留我在a 的操作資料。
2、有a操作記錄日志
3、有a的資料
啟動命令為:
docker run -d --name mysql -p 3306:3306 b/mysql
因為在a 的時候我就指定了root帳號、以及創建了我的資料庫、所以我在b的時候就只運行不做其它引數操作
不太清楚別人對mysql進行了哪些改動,建議你自己構建鏡像使用,提交鏡像最好容器停止服務,可能帶來一些問題
uj5u.com熱心網友回復:
不太清楚別人對mysql進行了哪些改動,建議你自己構建鏡像使用,提交鏡像最好容器停止服務,可能帶來一些問題
一般來說commit 了之后、就會把容器全部生成鏡像啊,包括容器里面操作的資料,難道真的是我這源鏡像有問題?
為了避免錯誤、我停止了容器在操作的
uj5u.com熱心網友回復:
不太清楚別人對mysql進行了哪些改動,建議你自己構建鏡像使用,提交鏡像最好容器停止服務,可能帶來一些問題
一般來說commit 了之后、就會把容器全部生成鏡像啊,包括容器里面操作的資料,難道真的是我這源鏡像有問題?
為了避免錯誤、我停止了容器在操作的
我做了實驗,查看mysql的存盤位置/var/lib/mysql,中只存了MYSQL_DATABASE=shoe指定的資料庫,
也就是說其它的資料庫沒有持久化,可能是寫在記憶體,或臨時檔案中,
在啟動b的時候會執行腳本,可能因為并沒有持久化才會造成資料丟失
uj5u.com熱心網友回復:
我做了實驗,查看mysql的存盤位置/var/lib/mysql,中只存了MYSQL_DATABASE=shoe指定的資料庫,
也就是說其它的資料庫沒有持久化,可能是寫在記憶體,或臨時檔案中,
在啟動b的時候會執行腳本,可能因為并沒有持久化才會造成資料丟失
那是不是制作完了容器之后、就需要持久化,手動持久化嗎?怎么操作的
uj5u.com熱心網友回復:
我做了實驗,查看mysql的存盤位置/var/lib/mysql,中只存了MYSQL_DATABASE=shoe指定的資料庫,
也就是說其它的資料庫沒有持久化,可能是寫在記憶體,或臨時檔案中,
在啟動b的時候會執行腳本,可能因為并沒有持久化才會造成資料丟失
那是不是制作完了容器之后、就需要持久化,手動持久化嗎?怎么操作的
要持久化就是容器啟動時指定MYSQL_DATABASE=shoe,只能有一個,如果要使用多個就自己構建鏡像
uj5u.com熱心網友回復:
要持久化就是容器啟動時指定MYSQL_DATABASE=shoe,只能有一個,如果要使用多個就自己構建鏡像
那這樣按照你的意思、一個容器只運行一個資料庫嗎?我不能在這個容器添加多個資料庫嗎?
uj5u.com熱心網友回復:
你的這個鏡像只能運行一個資料庫你可以自己構建鏡像運行多個資料庫
uj5u.com熱心網友回復:
你的這個鏡像只能運行一個資料庫
你可以自己構建鏡像運行多個資料庫
也就是說、一個容器只能運行一個資料庫嗎?
不應該的啊、一個容器就是一個資料庫,不僅僅只是運行一個資料庫的啊 !
但是出現我這樣的情況、也不知道怎么辦了
uj5u.com熱心網友回復:
mysql只是資料庫管理軟體,人家的理念就是一個容器運行一個資料庫,就是一個database,只是沒有限制好uj5u.com熱心網友回復:
容器在重啟后會初始化。uj5u.com熱心網友回復:
容器在重啟后會初始化。
重啟并不會清空我資料庫的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/58929.html
標籤:Docker
上一篇:多執行緒設計模式之保護性暫停模式
