如何在 Docker 中使用“>>”运算符?

How to use ">>" operator in Docker?

我正在尝试使用 docker exec 将字符串附加到 docker 容器中的文件。但是,它似乎没有正确解释“>>”运算符

 sudo docker exec --interactive mycontainer cat /etc/postfix/main.cf

returns

smtpd_banner = $myhostname ESMTP $mail_name (Debian)
biff = no
append_dot_mydomain = no
readme_directory = no

# Basic configuration
# myhostname =
...

但是

sudo docker exec --interactive mycontainer echo "my new line" >> /etc/postfix/main.cf

returns -bash: /etc/postfix/main.cf: No such file or directory

无论哪种方式,都有一个技巧可以将“>>”运算符传递给 docker-exec,或者还有另一个命令可以将字符串附加到文件中(这也可以,但我找不到原生的,因为容器没有任何花哨的库)。

有人有招吗?

您在 shell 中 运行 执行 sudo 命令,它在到达 sudo 或 docker 客户端之前解释 >>。您需要转义或引用字符,这样您自己的 shell 就不会解释它们,然后您需要在 docker 容器中 运行 一个 shell 来解释它们:

sudo docker exec -i mycontainer \
  /bin/sh -c 'echo "my new line" >> /etc/postfix/main.cf'

要将变量从外部 shell 传递到容器内部,您将无法使用单引号。您可以使用双引号并将要传递给内部 shell.

的任何内容转义
sudo docker exec -i mycontainer \
  /bin/sh -c "echo \"$host_var $container_var\" >> /etc/postfix/main.cf"