文章目錄
- 如何更改docker默認存儲路徑?
- 版本1(沒測試)
- 版本2(可行)
- 1. 停止 Docker 服務:
- 2. 創建新的存儲目錄:
- 3. 修改 Docker 配置文件:
- 4. 移動現有的 Docker 數據:
- 5. 重新啟動 Docker 服務:
- 6. 驗證修改
- 7. 真實驗證(記錄各時間點和存儲占用)
- Thu 11 Jul 2024 01:33:57 PM CST(`/`Available 27445M)
- Thu 11 Jul 2024 04:04:38 PM CST(`/`Available 27444M)
- Fri 12 Jul 2024 01:51:59 PM CST(`/`Available 27444M)
- 為什么存在以上兩種修改方法,有何異同?(修改`etc/systemd/system/docker.service.d/override.conf`和修改`etc/docker/daemon.json` )
如何更改docker默認存儲路徑?
版本1(沒測試)
默認情況下,Docker 在 Linux 上安裝時會將其數據(如鏡像和容器)存儲在 /var/lib/docker
目錄下,這個目錄通常位于根分區 /
。如果你的根分區 /
的空間不足,你可以考慮將 Docker 的數據目錄移動到其他分區,或者在安裝 Docker 時直接配置它使用其他分區。
要更改 Docker 的默認存儲位置,你可以通過修改 Docker 的配置文件或在啟動 Docker 服務時設置環境變量來指定新的數據目錄。下面是一些步驟說明如何進行配置:
-
停止 Docker 服務:
sudo systemctl stop docker
-
修改 Docker 配置文件(如果你使用的是 systemd):
- 打開或創建 Docker 的 systemd 配置文件(一開始沒有這個文件是正常的):
sudo vi /etc/systemd/system/docker.service.d/override.conf
- 添加以下內容來指定新的數據目錄,假設你想將數據存儲在
/mnt/docker/
:[Service] ExecStart= ExecStart=/usr/bin/dockerd --data-root /mnt/docker -H fd:// --containerd=/run/containerd/containerd.sock
- 保存并關閉文件。
- 打開或創建 Docker 的 systemd 配置文件(一開始沒有這個文件是正常的):
-
重新加載 systemd 配置并重新啟動 Docker 服務:
sudo systemctl daemon-reload sudo systemctl start docker
-
檢查 Docker 是否使用新的數據目錄:
docker info | grep "Docker Root Dir"
確保新的數據目錄所在的分區有足夠的空間,以避免在使用 Docker 時遇到空間不足的問題。
版本2(可行)
要修改 Docker 的存儲路徑至 /data/docker
,您可以按照以下步驟操作:
1. 停止 Docker 服務:
打開終端,使用以下命令停止 Docker 服務:
sudo systemctl stop docker.socket
sudo systemctl stop docker
一開始只執行一條停不了:
后面兩條執行就能停了:
2. 創建新的存儲目錄:
如果 /data/docker
目錄還不存在,使用以下命令創建它:
sudo mkdir -p /data/docker
3. 修改 Docker 配置文件:
編輯 Docker 的 daemon 配置文件 /etc/docker/daemon.json
。如果該文件不存在,您需要創建它。
sudo vi /etc/docker/daemon.json
在文件中添加或修改以下內容:
{"data-root": "/data/docker"
}
保存并關閉文件。
4. 移動現有的 Docker 數據:
如果您的 Docker 安裝中已經有數據,并且您希望保留這些數據,可以將現有的數據移動到新的目錄:
sudo rsync -aP /var/lib/docker/ /data/docker
5. 重新啟動 Docker 服務:
使用以下命令重新啟動 Docker 服務:
sudo systemctl start docker.socket
sudo systemctl start docker
6. 驗證修改
檢查 Docker 是否正確使用新的存儲路徑,可以查看 Docker 信息:
docker info | grep 'Docker Root Dir'
現在 Docker 已經成功地使用 /data/docker
作為其根目錄了。至于您看到的警告信息 “WARNING: No swap limit support”,這是一個常見的信息,指的是您的 Linux 系統上沒有啟用內存交換限制的支持。
在 Docker 中,這種警告通常不會影響 Docker 容器的正常運行,它只意味著 Docker 無法強制限制容器的交換內存使用量。這通常與 Linux 內核的某些配置有關,特別是 cgroup 的配置。
注意:如果不放心,可以執行mv /var/lib/docker /var/lib/docker_old
備份檢測下
7. 真實驗證(記錄各時間點和存儲占用)
通過使用一下兩條命令:
date
df -BM
Thu 11 Jul 2024 01:33:57 PM CST(/
Available 27445M)
root@ai-video-ecs-01:/userdata/tmp# date
Thu 11 Jul 2024 01:33:57 PM CST
root@ai-video-ecs-01:/userdata/tmp#
root@ai-video-ecs-01:/userdata/tmp#
root@ai-video-ecs-01:/userdata/tmp# df -BM
Filesystem 1M-blocks Used Available Use% Mounted on
udev 32078M 0M 32078M 0% /dev
tmpfs 6425M 4M 6422M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 38122M 8911M 27445M 25% /
tmpfs 32124M 0M 32124M 0% /dev/shm
tmpfs 5M 0M 5M 0% /run/lock
tmpfs 32124M 0M 32124M 0% /sys/fs/cgroup
/dev/loop1 64M 64M 0M 100% /snap/core20/2318
/dev/loop0 64M 64M 0M 100% /snap/core20/1828
/dev/loop2 50M 50M 0M 100% /snap/snapd/18357
/dev/loop3 39M 39M 0M 100% /snap/snapd/21759
/dev/vda2 1946M 109M 1719M 6% /boot
/dev/loop4 92M 92M 0M 100% /snap/lxd/24061
/dev/sda1 749867M 4140M 707565M 1% /ky
/dev/sda2 9401234M 2884M 8924482M 1% /data
tmpfs 6425M 0M 6425M 0% /run/user/1000
overlay 9401234M 2884M 8924482M 1% /data/docker/overlay2/c385332babdae4ee85601ffa1dd1ebe6c36fc1f618389ace09b2051731d5fa8c/merged
overlay 9401234M 2884M 8924482M 1% /data/docker/overlay2/31a24b6f39c2ea25d700754b5c9ea78574e772589690437fd60e4b60fac15c0c/merged
overlay 9401234M 2884M 8924482M 1% /data/docker/overlay2/88149e56439d9bad5b2b785f12ff77b6052c5ba369f53f9e12a38698c34615ce/merged
overlay 9401234M 2884M 8924482M 1% /data/docker/overlay2/b2171ae8eaa2b4b6bf61de50165b2e885f6e2d4373d02fd1e492cc1d2158bd9b/merged
overlay 9401234M 2884M 8924482M 1% /data/docker/overlay2/3e9af67e01934706a6712e2a6601292b105c26d5fecf82218f8d7ef65ca30b3d/merged
overlay 9401234M 2884M 8924482M 1% /data/docker/overlay2/341e8bc8f48a17d24ee4005c45cda9e121bececd2b0fea5463b337acbce64f04/merged
overlay 9401234M 2884M 8924482M 1% /data/docker/overlay2/6ee97fa0e1597535d0d70be41d5a3220c6f58ff033dba5388a53034afbeb8f5f/merged
root@ai-video-ecs-01:/userdata/tmp#
Thu 11 Jul 2024 04:04:38 PM CST(/
Available 27444M)
hw@ai-video-ecs-01:~$ date
Thu 11 Jul 2024 04:04:38 PM CST
hw@ai-video-ecs-01:~$
hw@ai-video-ecs-01:~$ df -BM
Filesystem 1M-blocks Used Available Use% Mounted on
udev 32078M 0M 32078M 0% /dev
tmpfs 6425M 4M 6422M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 38122M 8911M 27444M 25% /
tmpfs 32124M 0M 32124M 0% /dev/shm
tmpfs 5M 0M 5M 0% /run/lock
tmpfs 32124M 0M 32124M 0% /sys/fs/cgroup
/dev/loop1 64M 64M 0M 100% /snap/core20/2318
/dev/loop0 64M 64M 0M 100% /snap/core20/1828
/dev/loop2 50M 50M 0M 100% /snap/snapd/18357
/dev/loop3 39M 39M 0M 100% /snap/snapd/21759
/dev/vda2 1946M 109M 1719M 6% /boot
/dev/loop4 92M 92M 0M 100% /snap/lxd/24061
/dev/sda1 749867M 4141M 707564M 1% /ky
/dev/sda2 9401234M 2886M 8924479M 1% /data
tmpfs 6425M 0M 6425M 0% /run/user/1000
Fri 12 Jul 2024 01:51:59 PM CST(/
Available 27444M)
root@ai-video-ecs-01:/userdata/tmp# date
Fri 12 Jul 2024 01:51:59 PM CST
root@ai-video-ecs-01:/userdata/tmp#
root@ai-video-ecs-01:/userdata/tmp# df -BM
Filesystem 1M-blocks Used Available Use% Mounted on
udev 32078M 0M 32078M 0% /dev
tmpfs 6425M 4M 6422M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 38122M 8911M 27444M 25% /
tmpfs 32124M 0M 32124M 0% /dev/shm
tmpfs 5M 0M 5M 0% /run/lock
tmpfs 32124M 0M 32124M 0% /sys/fs/cgroup
/dev/loop1 64M 64M 0M 100% /snap/core20/2318
/dev/loop0 64M 64M 0M 100% /snap/core20/1828
/dev/loop2 50M 50M 0M 100% /snap/snapd/18357
/dev/loop3 39M 39M 0M 100% /snap/snapd/21759
/dev/vda2 1946M 109M 1719M 6% /boot
/dev/loop4 92M 92M 0M 100% /snap/lxd/24061
/dev/sda1 749867M 4154M 707550M 1% /ky
/dev/sda2 9401234M 2903M 8924463M 1% /data
tmpfs 6425M 0M 6425M 0% /run/user/1000
overlay 9401234M 2903M 8924463M 1% /data/docker/overlay2/c385332babdae4ee85601ffa1dd1ebe6c36fc1f618389ace09b2051731d5fa8c/merged
overlay 9401234M 2903M 8924463M 1% /data/docker/overlay2/31a24b6f39c2ea25d700754b5c9ea78574e772589690437fd60e4b60fac15c0c/merged
overlay 9401234M 2903M 8924463M 1% /data/docker/overlay2/88149e56439d9bad5b2b785f12ff77b6052c5ba369f53f9e12a38698c34615ce/merged
overlay 9401234M 2903M 8924463M 1% /data/docker/overlay2/b2171ae8eaa2b4b6bf61de50165b2e885f6e2d4373d02fd1e492cc1d2158bd9b/merged
overlay 9401234M 2903M 8924463M 1% /data/docker/overlay2/3e9af67e01934706a6712e2a6601292b105c26d5fecf82218f8d7ef65ca30b3d/merged
overlay 9401234M 2903M 8924463M 1% /data/docker/overlay2/341e8bc8f48a17d24ee4005c45cda9e121bececd2b0fea5463b337acbce64f04/merged
overlay 9401234M 2903M 8924463M 1% /data/docker/overlay2/6ee97fa0e1597535d0d70be41d5a3220c6f58ff033dba5388a53034afbeb8f5f/merged
root@ai-video-ecs-01:/userdata/tmp#
為什么存在以上兩種修改方法,有何異同?(修改etc/systemd/system/docker.service.d/override.conf
和修改etc/docker/daemon.json
)
在修改 Docker 的存儲位置時,可以通過修改 etc/docker/daemon.json
或 etc/systemd/system/docker.service.d/override.conf
來實現,兩種方式都是正確的,但它們有不同的用途和適用情況:
-
修改
/etc/docker/daemon.json
:- 這種方法通過 Docker 的配置文件來設置 Docker 的默認行為,包括存儲位置、日志級別、網絡配置等。
- 要修改存儲位置,你可以在
daemon.json
文件中設置data-root
屬性,指向新的存儲路徑。例如:{"data-root": "/new/path/to/docker-data" }
- 這種方法的優點是配置簡單,且直接通過 Docker 自己的配置文件進行管理,易于理解和維護。
-
修改
/etc/systemd/system/docker.service.d/override.conf
:- 這種方法適用于在使用 systemd 管理 Docker 服務的系統上。通過 systemd 的配置覆蓋文件來修改 Docker 服務的啟動參數。
- 你可以通過創建或修改
override.conf
文件,添加一個新的ExecStart
行,指定新的存儲位置。例如:[Service] ExecStart= ExecStart=/usr/bin/dockerd --data-root /new/path/to/docker-data
- 注意,需要先清空原有的
ExecStart
設置(ExecStart=
),然后重新定義。這樣可以確保使用你的自定義設置啟動 Docker。 - 這種方法允許你對 Docker 的啟動過程進行更細粒度的控制,但相對復雜,需要對 systemd 的配置有一定了解。
總結:選擇哪種方法取決于你的具體需求和你對系統的控制級別。如果你希望通過 Docker 自身的配置來管理,使用 daemon.json
是更直接的方法。如果你需要更復雜的配置或者想要控制服務的啟動參數,使用 systemd 的 override.conf
方法會更合適。