gpt4 book ai didi

bash - 对 docker 容器执行 sed 命令

转载 作者:行者123 更新时间:2023-11-29 09:46:29 24 4
gpt4 key购买 nike

我正在尝试更改 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

注意运行 bash 时常用的 -t,因为它分配一个伪 TTY,而我们并不真正需要它。此外,为了安全起见,请始终使用绝对路径,例如 /tmp/config.ini

关于bash - 对 docker 容器执行 sed 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39236537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com