繁体   English   中英

对 docker 容器执行 sed 命令

[英]Exec sed command to a docker container

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

Nehal是完全正确的,sed可以创建本地文件,因此您只需要一种不同的方法,该方法通常在Linux上使用: heredocs

仅从文档的第一行开始, here文档是一个专用代码块。 它使用一种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类的绝对路径。

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

这对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM