docker導(dǎo)入導(dǎo)出鏡像、容器,及啟動(dòng)容器失敗的解決過(guò)程
前言
隨著容器技術(shù)的發(fā)展,現(xiàn)在很多的應(yīng)用程序系統(tǒng)都會(huì)選擇使用docker容器進(jìn)行部署,但是有時(shí)候使用docker容器進(jìn)行部署的時(shí)候會(huì)遇到問(wèn)題,比如說(shuō)我們的應(yīng)用程序里面需要依賴(lài)其他第三方的鏡像,如果這時(shí)候服務(wù)器是在內(nèi)網(wǎng)不能連接外網(wǎng)的情況下,那么就無(wú)法部署了。
基于這種情況,docker官方支持docker鏡像和容器的導(dǎo)入和導(dǎo)出,我們可以在一臺(tái)能夠聯(lián)網(wǎng)的機(jī)器上面編譯鏡像,然后導(dǎo)出鏡像或者容器,最后把導(dǎo)出的鏡像或者容器上傳到內(nèi)網(wǎng)服務(wù)器,然后再導(dǎo)入鏡像或者容器,這樣就可以了。
1.docker鏡像的導(dǎo)入和導(dǎo)出
1.1 docker鏡像的導(dǎo)出
- 命令:
docker save [options] images [images……]
- 使用命令:
docker save -o /home/dockeruser/lgr/epower.tar 鏡像名稱(chēng)
或
docker save > /home/dockeruser/lgr/epower.tar 鏡像名稱(chēng)
例子:
docker save 192.162.100.92:5000/my_pro/front_dev:1.1 > /home/dockeruser/lgr/myprofrontdev.tar
- 解釋?zhuān)?/li>
-o(即output)或>表示輸出到文件;
/home/dockeruser/lgr/epower.tar指定導(dǎo)出的位置路徑,如果不指定路徑,默認(rèn)為當(dāng)前文件夾;
- 注意:
一般使用鏡像名稱(chēng)來(lái)做導(dǎo)出。如果用 docker save -o /home/dockeruser/lgr/epower.tar 鏡像id 導(dǎo)出(即使用鏡像id來(lái)做導(dǎo)出),后面再導(dǎo)入此鏡像后,會(huì)發(fā)現(xiàn)鏡像的名稱(chēng)和tag都是none,就還需要使用docker tag來(lái)重命名鏡像了。
1.2 docker鏡像的導(dǎo)入
首先需要使用xftp或其他工具將上面的.tar文件上傳到需要導(dǎo)入鏡像的服務(wù)器中。
- 命令:
docker load [options]
- 使用命令:
docker load -i epower.tar
或
docker load < epower.tar
例子:
docker load < /usr/local/epower/lgr/myprofrontdev.tar
- 解釋?zhuān)?/li>
-i(即input)或<表示從文件輸入;
使用docker images命令可以查看是否導(dǎo)入成功,導(dǎo)入成功就可以根據(jù)鏡像運(yùn)行容器;
由于load命令不能對(duì)鏡像重命名,我們可以使用docker tag 鏡像id 鏡像新名稱(chēng):新tag 命令給鏡像重命名;
2.docker容器的導(dǎo)入和導(dǎo)出
2.1 docker容器的導(dǎo)出
- 命令:
docker export [options] container
- 使用命令:
docker export -o /home/dockeruser/lgr/econtainer.tar 0a64dafa5db9
解釋?zhuān)?/p>
- -o表示輸出到文件;
- /home/dockeruser/lgr/econtainer.tar指定導(dǎo)出的位置路徑;
- 0a64dafa5db9為容器id;
2.2 docker容器的導(dǎo)入
首先需要使用xftp或其他工具將上面的.tar文件上傳到需要導(dǎo)入鏡像的服務(wù)器中。
- 命令:
docker import [options] file|url| -[repository[:tag]]
- 使用命令:
docker import econtainer.tar epower:latest
解釋?zhuān)?/p>
- econtainer.tar表示導(dǎo)入的容器;
- epower:latest表示給導(dǎo)入后的鏡像進(jìn)行重命名,latest表示給導(dǎo)入的鏡像打tag;
使用docker images命令可以查看是否導(dǎo)入成功,導(dǎo)入成功就可以根據(jù)鏡像運(yùn)行容器;
3.總結(jié)
- 鏡像導(dǎo)入是一個(gè)復(fù)制的過(guò)程;容器的導(dǎo)入是將當(dāng)前容器變成一個(gè)新的鏡像;
- docker save命令保存的是鏡像;docker export命令保存的是容器;
- export命令導(dǎo)出的tar文件略小于save命令導(dǎo)出的;
- export命令導(dǎo)出的是容器,export導(dǎo)出的文件在import導(dǎo)入時(shí),無(wú)法保留鏡像的所有歷史(即每一層layer信息),也就不能進(jìn)行回滾操作。而save命令導(dǎo)出的是鏡像,所以導(dǎo)入時(shí)可以完整保留每一層layer信息。docker history 鏡像id命令可以查詢(xún)每一層layer信息。
- load命令不能對(duì)鏡像重命名;import命令可以對(duì)鏡像重命名;
4.使用建議
如果只是為了備份鏡像,則使用save和load命令;
如果在啟動(dòng)容器后,容器內(nèi)容有變化之后需要備用,則使用export和import命令;
5.遇到問(wèn)題
- 問(wèn)題:
在使用export命令導(dǎo)出容器,import導(dǎo)入為鏡像后,使用命令
docker run -p 8812:8889 --name xxx -d 753 啟動(dòng)容器失敗,
報(bào)錯(cuò)如下:
docker: Error response from daemon: No command specified.
See 'docker run --help'.
錯(cuò)誤提示缺少明確的命令;
- 解決方法:
在導(dǎo)出容器的服務(wù)器使用docker ps --no-trunc命令查看具體的command,然后將command加入到啟動(dòng)命令最后即可。
docker run -p 8812:8889 --name xxx -d 753 /bin/sh -c 'java -Duser.timezone=Asia/Shanghai -cp /app/resources:/app/classes:/app/libs/* com.fp.epower.EpowerApplication'
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容
這篇文章主要介紹了如何解決docker logs無(wú)法實(shí)時(shí)輸出腳本打印的內(nèi)容問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07聊聊docker?單機(jī)部署redis集群的問(wèn)題
這篇文章主要介紹了docker?單機(jī)部署redis集群,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Docker 網(wǎng)絡(luò)模式(四種)詳細(xì)介紹
這篇文章主要介紹了Docker 網(wǎng)絡(luò)模式詳細(xì)介紹的相關(guān)資料,這里提供了四種網(wǎng)絡(luò)模式的介紹,Docker 作為輕量級(jí)容器技術(shù),很多比較不錯(cuò)的功能,網(wǎng)絡(luò)不是多好,這里就整理下,需要的朋友可以參考下2016-11-11Docker添加tomcat容器無(wú)法訪問(wèn)首頁(yè)解決方案
這篇文章主要介紹了Docker添加tomcat容器無(wú)法訪問(wèn)首頁(yè)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07docker環(huán)境下數(shù)據(jù)庫(kù)的備份(postgresql, mysql) 實(shí)例代碼
這篇文章主要介紹了docker環(huán)境下數(shù)據(jù)庫(kù)的備份(postgresql, mysql) ,需要的朋友可以參考下2019-05-05