我正在尝试更改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
CHMOD
docker exec --privileged container_name chmod 755 tmp/config.ini
Result: chmod: changing permissions of 'tmp/config.ini': Operation not permitted
我也尝试过在docker之前执行sudo但是也没用。
答案 0 :(得分:4)
Nehal是绝对正确的,sed可以创建一个本地文件,因此您只需要一种不同的方法,这种方法通常在Linux上使用:heredocs。
仅从文档中的第一行开始,这里的文档是一个特殊用途的代码块。它使用一种I / O重定向方式将命令列表提供给交互式程序。
它可以帮助我们使用docker exec,如下所示:
docker exec -i container_name bash <<EOF
sed -ire '/URL_BASE = /c\api.myapiurl' /tmp/config.ini
grep URL_BASE /tmp/config.ini
# any other command you like
EOF
请注意-t,它通常用于运行bash,因为它分配了一个伪TTY,我们并不真正需要它。
另外,为了安全起见,请始终使用/tmp/config.ini
等绝对路径。