docker導入導出鏡像、容器,及啟動容器失敗的解決過程
前言
隨著容器技術的發(fā)展,現在很多的應用程序系統(tǒng)都會選擇使用docker容器進行部署,但是有時候使用docker容器進行部署的時候會遇到問題,比如說我們的應用程序里面需要依賴其他第三方的鏡像,如果這時候服務器是在內網不能連接外網的情況下,那么就無法部署了。
基于這種情況,docker官方支持docker鏡像和容器的導入和導出,我們可以在一臺能夠聯網的機器上面編譯鏡像,然后導出鏡像或者容器,最后把導出的鏡像或者容器上傳到內網服務器,然后再導入鏡像或者容器,這樣就可以了。
1.docker鏡像的導入和導出
1.1 docker鏡像的導出
- 命令:
docker save [options] images [images……]
- 使用命令:
docker save -o /home/dockeruser/lgr/epower.tar 鏡像名稱
或
docker save > /home/dockeruser/lgr/epower.tar 鏡像名稱
例子:
docker save 192.162.100.92:5000/my_pro/front_dev:1.1 > /home/dockeruser/lgr/myprofrontdev.tar
- 解釋:
-o(即output)或>表示輸出到文件;
/home/dockeruser/lgr/epower.tar指定導出的位置路徑,如果不指定路徑,默認為當前文件夾;
- 注意:
一般使用鏡像名稱來做導出。如果用 docker save -o /home/dockeruser/lgr/epower.tar 鏡像id 導出(即使用鏡像id來做導出),后面再導入此鏡像后,會發(fā)現鏡像的名稱和tag都是none,就還需要使用docker tag來重命名鏡像了。
1.2 docker鏡像的導入
首先需要使用xftp或其他工具將上面的.tar文件上傳到需要導入鏡像的服務器中。
- 命令:
docker load [options]
- 使用命令:
docker load -i epower.tar
或
docker load < epower.tar
例子:
docker load < /usr/local/epower/lgr/myprofrontdev.tar
- 解釋:
-i(即input)或<表示從文件輸入;
使用docker images命令可以查看是否導入成功,導入成功就可以根據鏡像運行容器;
由于load命令不能對鏡像重命名,我們可以使用docker tag 鏡像id 鏡像新名稱:新tag 命令給鏡像重命名;
2.docker容器的導入和導出
2.1 docker容器的導出
- 命令:
docker export [options] container
- 使用命令:
docker export -o /home/dockeruser/lgr/econtainer.tar 0a64dafa5db9
解釋:
- -o表示輸出到文件;
- /home/dockeruser/lgr/econtainer.tar指定導出的位置路徑;
- 0a64dafa5db9為容器id;
2.2 docker容器的導入
首先需要使用xftp或其他工具將上面的.tar文件上傳到需要導入鏡像的服務器中。
- 命令:
docker import [options] file|url| -[repository[:tag]]
- 使用命令:
docker import econtainer.tar epower:latest
解釋:
- econtainer.tar表示導入的容器;
- epower:latest表示給導入后的鏡像進行重命名,latest表示給導入的鏡像打tag;
使用docker images命令可以查看是否導入成功,導入成功就可以根據鏡像運行容器;
3.總結
- 鏡像導入是一個復制的過程;容器的導入是將當前容器變成一個新的鏡像;
- docker save命令保存的是鏡像;docker export命令保存的是容器;
- export命令導出的tar文件略小于save命令導出的;
- export命令導出的是容器,export導出的文件在import導入時,無法保留鏡像的所有歷史(即每一層layer信息),也就不能進行回滾操作。而save命令導出的是鏡像,所以導入時可以完整保留每一層layer信息。docker history 鏡像id命令可以查詢每一層layer信息。
- load命令不能對鏡像重命名;import命令可以對鏡像重命名;
4.使用建議
如果只是為了備份鏡像,則使用save和load命令;
如果在啟動容器后,容器內容有變化之后需要備用,則使用export和import命令;
5.遇到問題
- 問題:
在使用export命令導出容器,import導入為鏡像后,使用命令
docker run -p 8812:8889 --name xxx -d 753 啟動容器失敗,
報錯如下:
docker: Error response from daemon: No command specified.
See 'docker run --help'.
錯誤提示缺少明確的命令;
- 解決方法:
在導出容器的服務器使用docker ps --no-trunc命令查看具體的command,然后將command加入到啟動命令最后即可。
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'
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
docker環(huán)境下數據庫的備份(postgresql, mysql) 實例代碼
這篇文章主要介紹了docker環(huán)境下數據庫的備份(postgresql, mysql) ,需要的朋友可以參考下2019-05-05

