自定義網(wǎng)站建站公司seo提升排名
Docker容器數(shù)據(jù)恢復(fù)
- 1 創(chuàng)建mongo數(shù)據(jù)庫(kù)時(shí)未掛載數(shù)據(jù)到宿主機(jī)
- 2 查找數(shù)據(jù)卷位置
- 3 將容器在宿主機(jī)上的數(shù)據(jù)復(fù)制到指定目錄下
- 4 修改docker-compose并掛載數(shù)據(jù)(注意端口)
- 5 重新運(yùn)行新容器
以mongodb8.0.3為例。
1 創(chuàng)建mongo數(shù)據(jù)庫(kù)時(shí)未掛載數(shù)據(jù)到宿主機(jī)
version: '3.1'
services:mongo_test:container_name: mongo_testrestart: alwaysimage: mongo:8.0.3ports:- 17017:27017volumes:- /etc/localtime:/etc/localtime:ro # 將外邊時(shí)間直接掛載到容器內(nèi)部,權(quán)限只讀#- /opt/soft/mongo/mongo_test/data:/data/db#- /opt/soft/mongo/mongo_test/conf:/data/configdb- /opt/soft/mongo/keyfile.key:/data/configdb/keyfile.keyenvironment:TZ: Asia/Shanghai # 設(shè)置時(shí)區(qū)為上海時(shí)區(qū)MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: 123456logging:driver: json-fileoptions:max-size: 10mmax-file: 5networks:- mongonetworks:mongo:driver: bridge
2 查找數(shù)據(jù)卷位置
數(shù)據(jù)卷通常存儲(chǔ)在/var/lib/docker/volumes/
目錄下。每個(gè)數(shù)據(jù)卷都有一個(gè)對(duì)應(yīng)的文件夾??梢允褂?code>docker volume ls列出所有容器使用的數(shù)據(jù)卷,然后使用docker inspect <volume_name>
查看特定數(shù)據(jù)卷的詳細(xì)信息,找到其在宿主機(jī)上的存儲(chǔ)路徑。
[root@node01 mongo]# docker volume ls
DRIVER VOLUME NAME
local 93bb1c65b0329a2050c29f2ef35eee4761a86029f1222e4f9df7d332a2bb6381
local f789fdd5ef3c229c7c1cb19a1478a7aba7416490191a563572eaf010f12317a2[root@node01 mongo]# ls /var/lib/docker/volumes/
93bb1c65b0329a2050c29f2ef35eee4761a86029f1222e4f9df7d332a2bb6381 backingFsBlockDev f789fdd5ef3c229c7c1cb19a1478a7aba7416490191a563572eaf010f12317a2 metadata.db
可以發(fā)現(xiàn)宿主機(jī)上的兩個(gè)目錄正是docker容器使用的卷。
容器存在時(shí),可通過(guò)查看容器內(nèi)數(shù)據(jù)默認(rèn)的掛載找到對(duì)應(yīng)關(guān)系:
docker inspect mongo_test"Mounts": [{"Type": "bind","Source": "/opt/soft/mongo/keyfile.key","Destination": "/data/configdb/keyfile.key","Mode": "rw","RW": true,"Propagation": "rprivate"},{"Type": "volume","Name": "f789fdd5ef3c229c7c1cb19a1478a7aba7416490191a563572eaf010f12317a2","Source": "/var/lib/docker/volumes/f789fdd5ef3c229c7c1cb19a1478a7aba7416490191a563572eaf010f12317a2/_data","Destination": "/data/configdb","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "93bb1c65b0329a2050c29f2ef35eee4761a86029f1222e4f9df7d332a2bb6381","Source": "/var/lib/docker/volumes/93bb1c65b0329a2050c29f2ef35eee4761a86029f1222e4f9df7d332a2bb6381/_data","Destination": "/data/db","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "bind","Source": "/etc/localtime","Destination": "/etc/localtime","Mode": "ro","RW": false,"Propagation": "rprivate"}]
如果容器不存在,可創(chuàng)建一個(gè)不掛載文件的新容器,從而分析已刪除的原容器數(shù)據(jù)卷和宿主機(jī)上的卷積對(duì)應(yīng)關(guān)系。
綜上可以了解,上述兩個(gè)數(shù)據(jù)卷是容器mongo_test使用的,且有如下對(duì)應(yīng)關(guān)系:
/var/lib/docker/volumes/f789fdd5ef3c229c7c1cb19a1478a7aba7416490191a563572eaf010f12317a2:/data/configdb/var/lib/docker/volumes/93bb1c65b0329a2050c29f2ef35eee4761a86029f1222e4f9df7d332a2bb6381:/data/db
3 將容器在宿主機(jī)上的數(shù)據(jù)復(fù)制到指定目錄下
mkdir -p /opt/soft/mongo/mongo_test/{conf,data}
chmod 777 /opt/soft/mongo/mongo_test/data
chmod 777 /opt/soft/mongo/mongo_test/confcp -R /var/lib/docker/volumes/f789fdd5ef3c229c7c1cb19a1478a7aba7416490191a563572eaf010f12317a2/_data/* /opt/soft/mongo/mongo_test/confcp -R /var/lib/docker/volumes/93bb1c65b0329a2050c29f2ef35eee4761a86029f1222e4f9df7d332a2bb6381/_data/* /opt/soft/mongo/mongo_test/data
4 修改docker-compose并掛載數(shù)據(jù)(注意端口)
version: '3.1'
services:mongo_test:container_name: mongo_testrestart: alwaysimage: mongo:8.0.3ports:- 17017:27017volumes:- /etc/localtime:/etc/localtime:ro # 將外邊時(shí)間直接掛載到容器內(nèi)部,權(quán)限只讀- /opt/soft/mongo/mongo_test/data:/data/db- /opt/soft/mongo/mongo_test/conf:/data/configdb- /opt/soft/mongo/keyfile.key:/data/configdb/keyfile.keyenvironment:TZ: Asia/Shanghai # 設(shè)置時(shí)區(qū)為上海時(shí)區(qū)MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: 123456logging:driver: json-fileoptions:max-size: 10mmax-file: 5networks:- mongonetworks:mongo:driver: bridge
5 重新運(yùn)行新容器
docker-compose up -d
至此,Docker容器數(shù)據(jù)恢復(fù)就完成了。