需求:docker容器存放目錄磁盤空間滿了,轉移數據修改Docker默認存儲位置
解決的具體步驟如下:
方法1:
1、停止docker服務。
systemctl stop docker; //每個liunx版本的命令不一樣。
2、創建新的docker目錄,執行命令df -h,找一個大的磁盤。我的是放在/home目錄下面,我的/home目錄大小有900G。 我在 /home目錄下面建了/home/work/docker_root目錄,執行的命令是:
mkdir -p /home/work/docker_root
3、遷移/var/lib/docker目錄下面的文件到 /home/docker/lib下面
cp -R /var/lib/docker/* /home/work/docker_root
注意:如果文件內容很多的話,爲了確保成功最好是一個文件一個文件的拷貝。如果在拷貝過程中報“設備上沒有空間”的錯誤,就使用mv剪切。
4、修改docker配置(/etc/systemd/system/docker.service.d/docker-options.conf),在文件中更改–data-root即可.
方法2、軟鏈接
默認情況下Docker的存放位置爲:/var/lib/docker
可以通過下面命令查看具體位置:
sudo docker info | grep "Docker Root Dir"
解決這個問題,最直接的方法當然是掛載分區到這個目錄,但是我的數據盤還有其他東西,這肯定不好管理,所以採用修改鏡像和容器的存放路徑的方式達到目的。
這個方法裏將通過軟連接來實現。
首先停掉Docker服務:
systemctl stop docker或者service docker stop
然後移動整個/var/lib/docker目錄到目的路徑:
mv /var/lib/docker /home/work/docker_root
ln -s /home/work/docker_root /var/lib/docker
這時候啓動Docker時發現存儲目錄依舊是/var/lib/docker,但是實際上是存儲在數據盤的,你可以在數據盤上看到容量變化。
方法3、system下創建配置文件
在/etc/systemd/system/docker.service.d 目錄下創建一個Drop-In文件“docker.conf”,默認 docker.service.d 文件夾不存在。所以你必須先創建它。
創建Drop-In 文件的原因,是我們希望Docker 服務,使用docker.conf文件中提到的特定參數,將默認服務所使用的位於/lib/systemd/system/docker.service文件中的參數進行覆蓋。如果你想深入瞭解Drop-In,請閱讀system.unit文檔
定義新的存儲位置現在打開docker.conf增加如下內容:
# sudo vi /etc/systemd/system/docker.service.d/docker.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph="/mnt/new_volume" --storage-driver=devicemapper
保存並退出VI編輯器,/mnt/new_volume 是新的存儲位置,而devicemapper是當前docker所使用的存儲驅動。如果你的存儲驅動有所不同,請輸入之前第一步查看並記下的值。Docker官方文檔中提供了更多有關各種存儲驅動器的信息。現在,你可以重新加載服務守護程序,並啓動Docker服務了。這將改變新的鏡像和容器的存儲位置。
sudo systemctl daemon-reload
sudo systemctl start docker
爲了確認一切順利,運行 # docker info 命令檢查Docker 的根目錄.它將被更改爲/mnt/new_volume
5、重載配置,重啓docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
6、啓動成功後,確定容器沒問題後刪除/var/lib/docker/目錄中的文件,然後就OK了。