完整的docker打包流程
把外網服務器上的docker搬到內網使用時,報了兩個錯誤,外網容器到tar包都沒問題,在內網使用tar包的時候報了兩個錯誤
- cannot connect to the Docker daemon at is the docker daemon running
- starting container process caused: "exec: "/bin/sh": stat /bin/sh: no such file or directory
發現是tar包到鏡像的問題,我用的命令是docker load --input xxx.tar
正確的是docker load < xxx.tar
現總結整個docker打包搬運流程如下:
1. 將容器變為鏡像
docker commit 261314c94305 imagexxx
可用參數
-a :提交的鏡像作者;
-c :使用Dockerfile指令來創建鏡像;
-m :提交時的說明文字;
-p :在commit時,將容器暫停。
imagexxx 是新創建的鏡像的名字
2. 將鏡像打包成tar包
docker save -o xxx.tar imagexxx # 當前路徑下會生成一個xxx.tar
例如:
docker save -o electric_know_1.31_0.tar electric_know_1.31_0:latest
3. 將tar包再次壓縮為gz包
tar -zcvf xxx.tar.gz xxx.tar # 當前路徑生成一個xxx.tar.gz壓縮包
4. 將tar.gz 挪到內網服務器
5. 將tar.gz 解壓縮,會生成一個tar包
tar -zxvf xxx.tar.gz
6. 將tar包生成鏡像
docker load < xxx.tar # 生成的鏡像跟之前打包的鏡像名稱一樣
7. 將鏡像生成容器
docker run -it --name 容器名稱 鏡像名稱 /bin.bash
# 給與開通sshd的sudo權限的方式生成容器
sudo docker run -d --name=wang --privileged=true --networ=khost -p 20000:22 9a5d1fa93203 /usr/sbin/init
sudo docker exec -it wang /bin/bash