![](/img/trans.png)
[英]apt-get install in Ubuntu 16.04 docker image: '/etc/resolv.conf': Device or resource busy
[英]"Device or resource busy" when i try move /etc/resolv.conf in ubuntu:18.04. How fix it?
我的 Docker 容器中有一個 VPN 客戶端( ubuntu:18.04
)。
客戶必須執行以下操作:
mv /etc/resolv.conf /etc/resolv.conf.orig
然后客戶端應該使用他們的 DNS 服務器創建新的/etc/resolv.conf
。 但是,移動失敗並出現錯誤:
mv: cannot move '/etc/resolv.conf' to '/etc/resolv.conf.orig': Device or resource busy
這可以解決嗎? 謝謝你提前。
PS:我無法更改 VPN 客戶端代碼。
在 Docker 容器中,/etc/ /etc/resolv.conf
文件不是普通的常規文件。 Docker 以一種特殊的方式對其進行管理:容器引擎將特定於容器的配置寫入容器外部的文件中,並將其綁定掛載到容器內部的/etc/resolv.conf
中。
當您的 VPN 客戶端運行mv /etc/resolv.conf /etc/resolv.conf.orig
時,事情歸結為rename(2)
系統調用(或該系列的類似調用),並且根據此系統調用的手冊頁, EBUSY
( Device or resource busy
)錯誤可能由幾個原因返回,包括原始文件是掛載點的情況:
忙
重命名失敗,因為 oldpath 或 newpath 是某個進程正在使用的目錄(可能作為當前工作目錄,或者作為根目錄,或者因為它已打開以供讀取)或正在被系統使用(例如作為掛載點),而系統認為這是一個錯誤。 (請注意,在這種情況下不需要返回 EBUSY ——無論如何進行重命名並沒有錯——但如果系統無法以其他方式處理這種情況,則允許返回 EBUSY。)
雖然有人說在這種情況下不能保證會產生錯誤,但它似乎總是針對綁定掛載目標觸發(我想這可能發生在這里):
$ touch sourcefile destfile
$ sudo mount --bind sourcefile destfile
$ mv destfile anotherfile
mv: cannot move 'destfile' to 'anotherfile': Device or resource busy
因此,類似地,您不能在容器內移動/etc/resolv.conf
,因為它是綁定安裝,並且沒有直接的解決方案。
鑒於/etc/resolv.conf
的綁定掛載是讀寫掛載,而不是只讀掛載,仍然可以覆蓋此文件:
$ mount | grep resolv.conf
/dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime)
因此,可能的解決方法是嘗試將此文件復制到.orig
備份,然后重寫原始文件,而不是重命名原始文件然后重新創建它。
不幸的是,這不符合您的限制( I can 't change the VPN client code.
),所以我敢打賭,您在這里不走運。
任何需要將文件移動到/etc/resolv.conf
的方法在 docker 容器中都會失敗。 解決方法是重寫原始文件,而不是在其上移動或重命名修改后的版本。
例如,在bash
提示符下使用以下命令:
(rc=$(sed 's/^\(nameserver 192\.168\.\)/# \1/' /etc/resolv.conf)
echo "$rc" > /etc/resolv.conf)
這可以通過重寫/etc/resolv.conf
來實現,如下所示:
sed
讀取和修改/etc/resov.conf
的當前內容nameserver 192.168.
rc
中"$rc"
中的更新內容覆蓋原始文件/etc/resolv.conf
括號中的命令列表用於在子 shell 中操作,以避免使用變量名rc
污染當前 shell 的名稱空間,以防萬一它正在使用中。
請注意,此命令不需要sudo
,因為它利用了容器內默認可用的超級用戶權限。
請注意, sed -i
(就地編輯)涉及將更新的文件移動到原始文件上,並且不起作用。
但如果可視化編輯器vi
在容器中可用,則使用vi
編輯和保存/etc/resolv.conf
是可行的,因為vi
會直接修改原始文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.