docker學習筆記:修改無法啟動的容器中的內容


我們可能會碰到這樣的一個問題,在容器執行過程中,修改了容器的內容(如配置文件信息),但因為修改出了問題。導致容器關閉后,無法啟動。

這事需要重新修改配置文件。 正常情況下可以通過 docker exec命令打開容器的一個shell終端進去修改。

但這時容器已經無法啟動了。這時該如何處理呢? 這有兩種方案:

方案一:創建新鏡像

把這個問題容器用docker commit提交到一個新的鏡像,然后用docker run -it 基於新鏡像運行一個新的容器進去改變(修復)配置文件。

再通過新的容器再提交一個新的鏡像,然后在基於新的鏡像重新啟動容器(同最初的容器)。

這個方法是可行的,但問題是步驟多,而且提交了新的鏡像,對於后續維護增加了復雜性。

 

方案二:直接修改容器的文件

所有的容器數據都存在/var/lib/docker/aufs/diff/路徑下。比如:

root@ubuntu:~# ls /var/lib/docker/aufs/diff/ -l
total 176
drwxr-xr-x  2 root root 4096 Mar  6 05:13 040bf8e0842564e26e62f3e3a30785bd9651c82c52ed99115cd5360ce979e680
drwxr-xr-x  6 root root 4096 Mar  6 05:13 04f7e78a2c8ac9664503f4ea5a1d94bf27b94620987f241cfb9fd6631f761113
drwxr-xr-x  2 root root 4096 Mar 11 01:07 0c666375883f81ba0fc3962368766e93710f59c072a4b80cdf5640323018ccdb
drwxr-xr-x  4 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f
drwxr-xr-x  6 root root 4096 Mar 11 07:53 0d7fc1722e459b242140ec45faec754d4967d72ea2ddf321f8606c837f8e8d4f-init
drwxr-xr-x  3 root root 4096 Mar  6 05:13 0dc5e226a795507723362cc16046cf16650f8f70dc7bb721b799a5f2a40512ce
drwxr-xr-x  2 root root 4096 Mar  6 05:13 0fd3b6e125673affc1f348cdb0c071782bde7d7ab4748bea3e30bc2d1d7ea7ab
......................

一個容器的數據對應這其中的一個或多個目錄 。其中目錄名的前幾位就是容器的ID,通過這知道容器和目錄的對應關系。
注意這個目錄需要用root用戶執行。

具體的操作步驟如下:

1、設置當前目錄  cd /var/lib/docker/aufs/diff/

2、查找要修改的配置文件所在容器中的位置

find ./ -name 'nginx.conf'

假設我們要修改的是 nginx.conf文件,可能的結果如:

./eb531927ba243b59f0db78848809423f7debe148a9ef972088ea41be73c2aa81/etc/nginx/nginx.conf
./4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a/etc/nginx/nginx.conf
./6fce3cb01e3c9b8cc4e1fc270c012b1d0b666fe49ad8b6bededb99e295c5da4c/etc/nginx/nginx.conf

這時我們通過比較要修改容器的ID 與上面幾個目錄的前綴,就知道是要修改哪個配置文件了。

如果我們進入類似 4975acfb30f3f729ac08a9c1bd642f735298a47057fc7c414c7479696b80f36a 目錄,會發現這個目錄下的內容和linux跟目錄下的目錄結構非常類似。我們可以找到相關的配置文件直接修改。

說明:因為一個容器的文件系統包括不可修改的鏡像層和可修改的讀寫層,這個目錄下其實就是讀寫層的內容。

3、修改完畢后用 docker start 容器名/ID  即可重新啟動容器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM