1

我正在尝试使用docker exec. 但是,它似乎没有正确解释“>>”运算符

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

返回

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

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

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

有人有窍门吗?

4

1 回答 1

1

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

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

要将变量从外壳传递到容器内部,您将无法使用单引号。您可以使用双引号并转义您想要传递给内壳的任何内容。

sudo docker exec -i mycontainer \
  /bin/sh -c "echo \"$host_var \$container_var\" >> /etc/postfix/main.cf"
于 2018-05-19T01:32:40.897 回答