В контейнере Docker файл /etc/resolv.conf
не является обычным обычным файлом. Docker управляет этим особым образом: механизм контейнера записывает спецификацию контейнера c, заданную контейнером, в файл вне контейнера и bind-mounts это в /etc/resolv.conf
внутри контейнера.
Когда ваш VPN-клиент запускает mv /etc/resolv.conf /etc/resolv.conf.orig
, все сводится к системному вызову rename(2)
(или аналогичному вызову из этого семейства), и, согласно man-странице для этого системного вызова, ошибка EBUSY
(Device or resource busy
) может возвращаться по нескольким причинам, включая ситуацию, когда исходный файл является точкой монтирования:
EBUSY
Переименование завершается неудачно, поскольку oldpath или newpath - это каталог, который используется каким-либо процессом (возможно, как текущий рабочий каталог, или как каталог root, или потому что он был открыт для чтения), или используется системой (, например, как точка монтирования ), в то время как система считает это ошибкой , (Обратите внимание, что в таких случаях нет необходимости возвращать 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
внутри контейнера, так как это крепление для привязки, и нет прямого решения.
Учитывая, что связывание mount /etc/resolv.conf
- монтирование для чтения и записи, а не только для чтения, этот файл все еще можно перезаписать:
$ mount | grep resolv.conf
/dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime)
Таким образом, возможное исправление может заключаться в попытке copying этот файл в резервную копию .orig
, а затем перезапись исходного вместо переименование исходного файла и последующее его повторное создание.
К сожалению, это не соответствует ваши ограничения (I can 't change the VPN client code.
), так что держу пари, что вам здесь не повезло.