目錄
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日