在 Docker 實務中,常常需要取出容器或映像中的設定檔,用於備份、修改或初始化設定。本文整理幾種常用的方法,涵蓋 docker cp、從 Image 提取、以及進入容器查看。
方法一:docker cp 複製檔案(雙向)
docker cp 是最直接的方式,可以在容器與主機之間雙向複製檔案或目錄。
從容器複製到主機
1
2
3
4
5
|
# 語法:docker cp <容器名稱或ID>:<容器內路徑> <本機路徑>
docker cp my-container:/etc/nginx/nginx.conf ./nginx.conf
# 複製整個目錄
docker cp my-container:/etc/nginx/ ./nginx-config/
|
從主機複製到容器
1
2
|
# 語法:docker cp <本機路徑> <容器名稱或ID>:<容器內路徑>
docker cp ./nginx.conf my-container:/etc/nginx/nginx.conf
|
容器不需要正在執行,docker cp 也能對已停止的容器操作。
方法二:從 Image 提取設定檔(不啟動容器)
若想從 Docker Image 中取出預設設定檔,可先用 docker create 建立容器(不啟動),再用 docker cp 複製:
1
2
3
4
5
6
7
8
|
# 步驟一:建立容器(不啟動)
docker create --name temp_container prom/prometheus
# 步驟二:複製設定檔到本機
docker cp temp_container:/etc/prometheus/prometheus.yml ./prometheus.yml
# 步驟三:清除暫時容器
docker rm temp_container
|
這個方法很適合在寫 docker-compose.yml 時,先取出預設設定作為範本再加以修改。
方法三:掛載目錄(Volume)
使用 -v 掛載主機目錄到容器,容器寫入的檔案直接出現在主機上:
1
2
3
4
5
6
7
8
|
# 啟動容器並掛載設定目錄
docker run -d \
--name my-prometheus \
-v D:\hugo-blog/prometheus-config:/etc/prometheus \
prom/prometheus
# 容器啟動後,主機的 prometheus-config 目錄就有設定檔了
ls ./prometheus-config/
|
在 docker-compose.yml 中的寫法:
1
2
3
4
5
|
services:
prometheus:
image: prom/prometheus
volumes:
- ./prometheus-config:/etc/prometheus
|
方法四:進入容器查看檔案
若想直接在容器內查看或修改檔案:
1
2
3
4
5
6
7
8
9
10
11
|
# 進入正在運行的容器(bash)
docker exec -it my-container bash
# 若容器是 Alpine(沒有 bash)
docker exec -it my-container sh
# 執行單一指令(不進入 shell)
docker exec my-container cat /etc/nginx/nginx.conf
# 查看目錄結構
docker exec my-container ls -la /etc/nginx/
|
方法五:用 docker run 直接輸出
1
2
|
# 啟動容器並輸出設定到 stdout,再重新導向到本機檔案
docker run --rm prom/prometheus cat /etc/prometheus/prometheus.yml > prometheus.yml
|
各方法比較
| 方法 |
容器狀態 |
適用場景 |
docker cp |
執行中或已停止 |
快速複製單一檔案 |
docker create + cp |
不需啟動 |
從 Image 取出預設設定 |
| Volume 掛載 |
執行中 |
持久化設定,雙向同步 |
docker exec |
執行中 |
互動式查看或修改 |
docker run --rm |
一次性執行 |
快速查看預設設定內容 |
參考資料