对Docker容器执行sed命令

qojgxg4l  于 2022-12-29  发布在  Docker
关注(0)|答案(2)|浏览(252)

我正在尝试更改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执行,但也不起作用。

qv7cva1a

qv7cva1a1#

Nehal是完全正确的,sed可以创建本地文件,因此您只需要一种不同的方法,这是Linux上常用的方法:heredocs.
从文档的第一行开始,这里的文档是一个特殊用途的代码块,它使用I/O重定向的形式将命令列表提供给交互式程序。
它可以帮助我们与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,而我们实际上并不需要它。另外,为了安全起见,请始终使用绝对路径,如/tmp/config.ini

hfsqlsce

hfsqlsce2#

docker exec -i <container name> sed -i 's/xxx/${yyy}/g' path/filename.yaml

这对我很有效。

相关问题