dockerhub連不上怎麼辦?如何從一臺電腦搬到另一臺。

科里布發表於2024-10-22

參考: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 5a7772b55fa0 nodered_siit:latest

把映象打包成tar壓縮包並輸出

$ docker save -o node_red_img.tar nodered_siit:latest

檢視檔案


我們可以看到這個檔案就有了。接下來需要做的就是把這個虛擬機器裡的檔案傳到我的pi上面。

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,問題解決。

相關文章