Contents

抓出 Docker 裡面檔案設定檔出來

在 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 一次性執行 快速查看預設設定內容

參考資料