【发布时间】:2017-01-07 06:32:27
【问题描述】:
我正在尝试更改 docker 容器内的配置文件。
docker exec container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini
在本地执行此 sed 命令可以正常工作,但是当我尝试在容器中执行此命令时,我收到以下错误消息。
sed: cannot rename tmp/config.ini: Operation not permitted
我需要做的是在将容器部署到我的服务器之前替换 'config.ini' 中的 'URL_BASE ='。
我不知道为什么 sed 命令不应该重命名文件。
有什么想法吗?
我尝试过的
我尝试使用 --privileged 标志执行,但没有成功。我尝试使用 chmod 更改文件权限,但出于相同的权限原因,我无法更改。
docker exec --privileged container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini
Result: sed: cannot rename tmp/config.ini: Operation not permitted
修改
docker exec --privileged container_name chmod 755 tmp/config.ini
Result: chmod: changing permissions of 'tmp/config.ini': Operation not permitted
我也尝试过在 docker 之前使用 sudo 执行,但也没有用。
【问题讨论】:
-
这是替换字符串的正确命令吗?手动执行时可以验证:
docker run -it <image> bash然后执行sed <...> -
Sed inplace 通过创建文件的副本然后将其替换为原始文件来工作。您的问题是您在具有管理员权限的容器内创建了文件,但在后面部分转移给了另一个用户。因此,每当您尝试执行 exec 时,您都是以非管理员用户身份输入这些命令。向我们展示您的 Dockerfile。您可以通过键入以下内容来验证这一点:
docker exec container_name whoami和docker exec container_name ls -l tmp/config.ini