Как использовать оператор ">>" в Docker?
Я пытаюсь добавить строку в файл в Docker-контейнере, используя 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, или есть другая команда для добавления строки в файл (что было бы хорошо, но я не смог найти ту, которая была бы родной, потому что контейнеры не имеют каких-либо модных библиотек).
У кого-нибудь есть подвох?
1 ответ
Вы запускаете команду sudo в оболочке, и она интерпретирует >>
до того, как он достигнет sudo или док-клиента. Вам нужно экранировать или заключать в кавычки символы, чтобы ваша собственная оболочка не интерпретировала их, а затем вам нужно запустить оболочку внутри контейнера докера, чтобы интерпретировать их:
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"