目錄

docker save 指令:匯出與載入映像檔(save、load、export、import)

docker save 與 docker load 用來搬移映像檔;docker export 與 docker import 處理的是容器檔案系統,映像檔的設定可能不同。映像檔的基本概念見 Docker 映像檔。

語法

docker save [OPTIONS] IMAGE [IMAGE...]
docker load [OPTIONS]
docker export [OPTIONS] CONTAINER
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

參數

指令參數說明
save-o, --output string寫入指定檔案;未指定時輸出到 STDOUT
save--platform strings只儲存指定平台,可用逗號分隔,例如 linux/amd64,linux/arm64/v8
load-i, --input string從指定 tar 封存檔讀取;未指定時從 STDIN 讀取
load--platform strings只載入指定平台
load-q, --quiet不顯示載入輸出
export-o, --output string將容器檔案系統寫入指定檔案
import-c, --change list對建立的映像檔套用 Dockerfile 指令
import-m, --message string設定匯入映像檔的提交訊息
import--platform string若伺服器支援多平台,設定平台

範例

儲存映像檔、gzip 壓縮與載入

$ docker save -o nginx.tar nginx:1.30-alpine

$ ls -lh nginx.tar
-rw-------    1 root     root       25.7M Oct 25 15:31 nginx.tar

$ docker save nginx:1.30-alpine | gzip > nginx.tar.gz && ls -lh nginx.tar.gz
-rw-r--r--    1 root     root       24.9M Oct 25 15:31 nginx.tar.gz

$ docker load -i nginx.tar.gz
Loaded image: nginx:1.30-alpine

$ docker images nginx
IMAGE               ID             DISK USAGE   CONTENT SIZE   EXTRA
nginx:1.30-alpine   47928bf67eb6       93.5MB           27MB   U
  • docker save -o 將映像檔寫入 tar 封存檔;直接使用時,25.7MB 的檔案包含映像檔資料。
  • 這個映像檔 gzip 後為 24.9MB,只比原 tar 小 0.8MB,壓縮效果有限。
  • docker load -i 能直接讀取 gzip 壓縮的封存檔,並載入 nginx:1.30-alpine。
  • 載入後 docker images 可看到映像檔;其 DISK USAGE 顯示 93.5MB,和封存檔大小是不同欄位。

export/import 匯入檔案系統

$ docker export web -o web-fs.tar && ls -lh web-fs.tar
-rw-------    1 root     root       60.5M Oct 25 15:31 web-fs.tar

$ docker import web-fs.tar myweb:snapshot
sha256:56e3f92534ca8c5aedd8de576ae2433f1864d3d3b51de847a8dc8dd7d503da4d

$ docker run --rm myweb:snapshot cat /usr/share/nginx/html/hi.txt
hello

$ docker image inspect -f '{{.Config.Cmd}}' nginx:1.30-alpine
[nginx -g daemon off;]

$ docker image inspect -f '{{.Config.Cmd}}' myweb:snapshot
[]

$ docker run --rm myweb:snapshot
docker: Error response from daemon: no command specified

Run 'docker run --help' for more information
  • docker export 將 web 容器的檔案系統寫成 tar,再由 docker import 建立 myweb:snapshot 映像檔。
  • 匯入的映像檔仍包含檔案:指定 cat /usr/share/nginx/html/hi.txt 能讀到 hello。
  • nginx:1.30-alpine 的 .Config.Cmd 有 nginx -g daemon off;,但 myweb:snapshot 的 .Config.Cmd 是空陣列 []。
  • 因為匯入映像檔沒有預設命令,直接 docker run 會回報 no command specified;執行時需明確指定命令。

相關章節

動手練習

練習:將 nginx:1.30-alpine 儲存為 gzip 壓縮封存檔,再從該檔載入映像檔。

答案
docker save nginx:1.30-alpine | gzip > nginx.tar.gz
docker load -i nginx.tar.gz

常見問題

docker save 和 docker export 有什麼不同?

docker save 封存映像檔,之後可用 docker load 載回映像檔;docker export 匯出的是容器檔案系統,搭配 docker import 會建立新的映像檔。

用 gzip 壓縮 docker save 的結果可以省多少空間?

這次 nginx:1.30-alpine 的 tar 檔是 25.7MB,gzip 後是 24.9MB,差異有限。

為什麼 docker import 後直接 docker run 出現 no command specified?

匯入的 myweb:snapshot 其 .Config.Cmd 是空陣列 [],沒有預設命令;指定 cat /usr/share/nginx/html/hi.txt 可讀取檔案,但不帶命令執行就會顯示 no command specified。

更新於 2026年10月26日