gpt4 book ai didi

docker - "Device or resource busy"当我尝试在 ubuntu 中移动/etc/resolv.conf :18. 04. 如何修复它?

转载 作者:行者123 更新时间:2023-12-02 19:00:41 30 4
gpt4 key购买 nike

我的 Docker 容器中有一个 VPN 客户端 (ubuntu:18.04)。

客户必须执行以下操作:

mv /etc/resolv.conf /etc/resolv.conf.orig

然后客户端应该创建新的 /etc/resolv.conf与他们的 DNS 服务器。但是,移动失败并出现错误:
mv: cannot move '/etc/resolv.conf' to '/etc/resolv.conf.orig': Device or resource busy

这可以解决吗?谢谢你提前。

P.S.:我无法更改 VPN 客户端代码。

最佳答案

在 Docker 容器中,/etc/resolv.conf文件不是普通的常规文件。 Docker 以一种特殊的方式对其进行管理:容器引擎将容器特定的配置写入容器外部的文件中,并将其绑定(bind)挂载到 /etc/resolv.conf容器内。

当您的 VPN 客户端运行时 mv /etc/resolv.conf /etc/resolv.conf.orig ,事情归结为rename(2)系统调用(或来自该系列的类似调用),并且根据此系统调用的手册页,EBUSY ( Device or resource busy ) 错误可能由几个原因返回,包括原始文件是挂载点的情况:

EBUSY

The rename fails because oldpath or newpath is a directory that is in use by some process (perhaps as current working directory, or as root directory, or because it was open for reading) or is in use by the system (for example as mount point), while the system considers this an error. (Note that there is no requirement to return EBUSY in such cases — there is nothing wrong with doing the rename anyway — but it is allowed to return EBUSY if the system cannot otherwise handle such situations.)



虽然有人说在这种情况下不能保证会产生错误,但它似乎总是针对绑定(bind)安装目标触发(我猜这可能会发生 here ):
$ touch sourcefile destfile
$ sudo mount --bind sourcefile destfile
$ mv destfile anotherfile
mv: cannot move 'destfile' to 'anotherfile': Device or resource busy

因此,同样,您不能移动 /etc/resolv.conf在容器内部,因为它是绑定(bind)安装,并且没有直接的解决方案。

鉴于 /etc/resolv.conf 的绑定(bind)安装是读写挂载,不是只读挂载,仍然可以覆盖这个文件:

$ mount | grep resolv.conf
/dev/sda1 on /etc/resolv.conf type ext4 (rw,relatime)

因此,可能的解决方法是尝试将此文件复制到 .orig备份然后重写原始文件,而不是重命名原始文件然后重新创建它。

不幸的是,这不符合您的限制 ( I can 't change the VPN client code.),所以我敢打赌,您在这里运气不好。

关于docker - "Device or resource busy"当我尝试在 ubuntu 中移动/etc/resolv.conf :18. 04. 如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60549775/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com