我正在尝试更改 docker 容器内的配置文件。
docker exec container_name sed -ire '/URL_BASE = /c\api.myapiurl' tmp/config.ini
Run Code Online (Sandbox Code Playgroud)
在本地执行此 sed 命令工作正常,但是当我尝试在容器中执行此命令时,我收到以下错误消息。
sed: cannot rename tmp/config.ini: Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我需要做的是更换“URL_BASE =”从“config.ini文件”之前部署容器到我的服务器。
我不知道为什么 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
Run Code Online (Sandbox Code Playgroud)
修改器
docker exec --privileged container_name chmod 755 tmp/config.ini
Result: chmod: changing permissions of 'tmp/config.ini': Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我也试过在 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
Run Code Online (Sandbox Code Playgroud)
请注意 -t,它在运行 bash 时常用,因为它分配了一个伪 TTY,而我们实际上并不需要它。此外,为了安全起见,始终使用绝对路径,如/tmp/config.ini
.
归档时间: |
|
查看次数: |
4919 次 |
最近记录: |