dockerhub连不上怎么办?如何从一台电脑搬到另一台。

参考:Docker将运行中容器打包成镜像并保存到本地

问题

近期在本地虚拟机和阿里云服务器上都折腾了几个docker。然后想着在本地的树莓派上也装上node-red,计划丢在实验室里面连PLC。结果半吊子的我,先走全局安装,再走docker,都以失败告终。前者装了nvm、node之后,运行nvm指令失败。后者通过各种方法都是timeout。再在网上看了一些自建的dockerhub,大致反应过来,似乎这东西不像apt一样,而是可以自己搭个docker仓库的。于是想着把已经装好的docker能不能先打包传输到pi上面安装,以后有空再研究自己搭个docker仓库方便拉取。找了下,发现了文首的那篇博客。

打包

将容器保存为镜像

docker commit <容器ID或名称> <镜像名称>:<标签>

具体我做的是

ssh到我的虚拟机并查看容器

$ sudo docker ps -a
CONTAINER ID   IMAGE              COMMAND             CREATED       STATUS                    PORTS                                       NAMES
5a7772b55fa0   nodered/node-red   "./entrypoint.sh"   7 weeks ago   Up 36 minutes (healthy)   0.0.0.0:1880->1880/tcp, :::1880->1880/tcp   mynodered

把现有的容器保存成镜像

$ sudo docker commit                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      nodered_siit:latest

把镜像打包成tar压缩包并输出

$ docker save -o node_red_img.tar nodered_siit:latest

查看文件


我们可以看到这个文件就有了。接下来需要做的就是把这个虚拟机里的文件传到我的pi上面。

还有一种方法是将镜像打包成tar文件

使用docker save -o <打包的tar文件> <镜像ID>

查看镜像

$ sudo docker images
REPOSITORY             TAG       IMAGE ID       CREATED        SIZE
codercom/code-server   latest    1cae4088db70   4 weeks ago    739MB
grafana/grafana        latest    de903bc9ce7c   8 weeks ago    478MB
mysql                  latest    c757d623b190   3 months ago   586MB

打包镜像

$ sudo docker save -o grafana_img.tar de903bc9ce7c

查看输出文件

$ ls
Desktop    Downloads  Pictures  Templates  VirtualControlAPI.py  `grafana_img.tar`
Documents  Music      Public    Videos     grafana

然后需要把tar文件传入需要的安装这个镜像的那台电脑。

Linux之间传文件

scp指令

$ sudo scp node_red_img.tar siit@192.168.122.43:~/
The authenticity of host '192.168.122.43 (192.168.122.43)' can't be established.
ED25519 key fingerprint is SHA256:MhT5RyOnqnKAUpPEvT/xONvVHjd3rmgi0HcTUNDq9HY.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.122.43' (ED25519) to the list of known hosts.
siit@192.168.122.43's password: 
node_red_img.tar                              100%  738MB 189.4MB/s   00:03  

其实没成功,传过去后发现因为虚拟机用的x86架构和pi的arm架构的docker不兼容,所以以下内容具体实施是从虚拟机转到虚拟机********************
传完文件过后,使用docker load把之前打包成tar的压缩包载入新机器的docker images里面

$ sudo docker load -i node_red_img.tar
78561cef0761: Loading layer  8.082MB/8.082MB
3762a94f9dbd: Loading layer  122.1MB/122.1MB
32abe9a81c15: Loading layer   5.61MB/5.61MB
186d35b3efff: Loading layer  3.584kB/3.584kB
4d6aebb789b4: Loading layer  4.608kB/4.608kB
7de19ea56e73: Loading layer   2.56kB/2.56kB
ca873884f967: Loading layer  21.39MB/21.39MB
5f70bf18a086: Loading layer  1.024kB/1.024kB
9cc17eb232c5: Loading layer  6.144kB/6.144kB
177ddae17d50: Loading layer  8.192kB/8.192kB
2b465594d98a: Loading layer  4.608kB/4.608kB
ea698edee62f: Loading layer  4.096kB/4.096kB
ef933f1a0bd8: Loading layer  3.584kB/3.584kB
badb32c1526f: Loading layer  3.584kB/3.584kB
56aa82df8a39: Loading layer  83.09MB/83.09MB
0130bb700840: Loading layer  348.9MB/348.9MB
b82597808ede: Loading layer  6.656kB/6.656kB
5b139ee354cc: Loading layer  184.7MB/184.7MB
Loaded image: nodered_siit:latest

然后,我们通过docker images指令查看

$ sudo docker images
REPOSITORY     TAG       IMAGE ID       CREATED      SIZE
nodered_siit   latest    ecc9f6a2e5c5   2 days ago   746MB

可以看到新的镜像已经载入。然后的操作就和以前pull之后做的一样,需要 docker run了。

$ sudo docker run -d --name mynodered -p 1880:1880 nodered_siit
7a67342ceb34be393533184097ff20de9da2f6c8864199df75168560099f0f7c
docker: Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `apparmor_parser apparmor_parser --version` failed with output: 

然后遇到报了个错,缺AppArmor。就装一下:

$ sudo apt-get install apparmor

装完之后,sudo docker ps -a发现新的mynodered已经有了。
然后sudo docker start mynodered
然后浏览器打开IP:1880,OK,问题解决。

如果复制的是容器,也就是用的docker commit <容器> <打包镜像.tar>,最终恢复后的是之前运行的容器,也就是说,容器当时的状态也被保存了下来。
如果复制的是镜像,就只是复制镜像,恢复后和pull下来的原始镜像一样。但我按照ID复制恢复后的image发现只有ID而没有repository和tag,此时需要使用docker tag <镜像ID> newrepository:newtag进行重新打标签。具体我遇到的问题如下:

$ sudo docker images
REPOSITORY     TAG       IMAGE ID       CREATED        SIZE
nodered_siit   latest    ecc9f6a2e5c5   6 days ago     746MB
<none>         <none>    de903bc9ce7c   8 weeks ago    478MB
<none>         <none>    c757d623b190   3 months ago   586MB
$ sudo docker tag de903bc9ce7c grafana/grafana:latest
$ sudo docker tag c757d623b190 mysql/latest

再次查看

$ sudo docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
nodered_siit      latest    ecc9f6a2e5c5   6 days ago     746MB
grafana/grafana   latest    de903bc9ce7c   8 weeks ago    478MB
mysql/latest      latest    c757d623b190   3 months ago   586MB
posted @ 2024-10-22 00:09  科里布  阅读(60)  评论(0编辑  收藏  举报