执行sed命令到docker集装箱

我正在尝试更改Docker容器内的configuration文件。

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'中replace'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执行,但是也没有工作。

Nehal是绝对正确的,sed可以创build一个本地文件,所以你只需要一个不同的方法,在Linux上通常使用: heredocs 。

从文档的第一行开始, here文档就是一个特殊用途的代码块。 它使用I / Oredirect的forms将命令列表提供给交互式程序。

它可以帮助我们与docker执行如下:

 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,我们并不需要这个。 另外,为了安全,总是使用绝对path,如/tmp/config.ini