gpt4 book ai didi

bash - Docker exec - 将文本写入容器中的文件

转载 作者:IT老高 更新时间:2023-10-28 12:42:08 28 4
gpt4 key购买 nike

我想将一行文本写入一个正在运行的 docker 容器内的文本文件。到目前为止,这是我尝试过的:

docker exec -d app_$i eval echo "server.url=$server_url" >> /home/app/.app/app.config

回复:

/home/user/.app/app.config: No such file or directory

第二次尝试:

cfg_add="echo 'server.url=$server_url' >> /home/user/.app/app.config"
docker exec -i app_$i eval $cfg_add

回复:

exec: "eval": executable file not found in $PATH

有什么想法吗?

最佳答案

eval 是一个 shell builtin,而 docker exec 需要调用 external utility,所以使用eval 不是一个选项。

相反,显式地调用容器中的shell可执行文件(bash),并通过字符串向其传递要执行的命令,通过它的 -c 选项:

docker exec "app_$i" bash -c "echo 'server.url=$server_url' >> /home/app/.app/app.config"

通过使用 双引号 字符串传递给 bash -c,您可以确保 current shell 首先执行字符串插值,而容器的 bash 实例随后将扩展结果视为 literal,作为嵌入 单引号 字符串的一部分。


至于你的症状:

  • /home/user/.app/app.config: No such file or directory 被报告,因为您打算在容器中进行重定向实际上发生在 你的主机的 shell - 因为 dir. /home/user/.app 显然不存在于您主机的文件系统中,该命令根本上失败,之前您的主机的外壳甚至试图执行命令(如果无法执行输出重定向,bash 将中止命令执行)。

    • 因此,即使您的第一个命令也包含 eval,但在您的第二个命令实际上确实被执行之前,它的使用并没有成为问题。
  • exec: "eval": executable file not found in $PATH 发生了,因为如前所述,eval 不是外部实用程序,但是一个 shell builtindocker exec 只能执行外部实用程序。

关于bash - Docker exec - 将文本写入容器中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703317/

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