Как использовать оператор «>>» в Docker? - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь добавить строку в файл в контейнере 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 Ответ

0 голосов
/ 19 мая 2018

Вы запускаете команду 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"
...