dockerhub连不上怎么办?如何从一台电脑搬到另一台。
问题
近期在本地虚拟机和阿里云服务器上都折腾了几个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