如何在 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"
我正在尝试使用 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"