Ошибка "не tty" в изображении двойственности на основе Alpine
Это мой первый вопрос в stackru, поэтому я надеюсь, что он будет придерживаться принципов сообщества:
Я построил образ докера на основе уже существующего образа, единственной целью которого является запуск двуличия в контейнере для резервного копирования файлов и папок в корзину Amazon S3 в Европе.
Duplicity работали в течение нескольких дней, когда запускались вручную внутри контейнера, полученного из изображения. Теперь я перешел к запуску контейнеров через файлы модулей на хосте с CoreOS, и все больше не работает - но команда также не сработает, я запускаю его вручную в контейнере дублирования.
Команда запуска:
docker run --rm --env-file=<my backup env file>.env --name=<container image> -v <cache container>:/home/duplicity/.cache/duplicity -v <docker volume with gpg keys>:/home/duplicity/.gnupg --volumes-from <docker container of interest> gymnae/duplicity
env-файл содержит следующее:
PASSPHRASE=<my super secret passphrase>
AWS_ACCESS_KEY_ID=<my aws access key id>
AWS_SECRET_ACCESS_KEY=<my aws access key>
SOURCE_PATH=<where does the data come from>
REMOTE_URL=s3://s3.eu-central-1.amazonaws.com/<my bucket>
PARAMS_CLEAN="--remove-older-than 3M --force --extra-clean"
ENCRYPT_KEY=<derived from the gpg key>
И init.sh
, который называется docker run
выглядит так:
#!/bin/sh
duplicity \
--verbosity 8 \
--s3-use-ia \
--s3-use-new-style \
--s3-use-server-side-encryption \
--s3-european-buckets \
--allow-source-mismatch \
--ssl-no-check-certificate \
--s3-unencrypted-connection \
--volsize 150 \
--gpg-options "--no-tty" \
--encrypt-key $ENCRYPT_KEY \
--sign-key $ENCRYPT_KEY \
$SOURCE_PATH \
$REMOTE_URL
Я пробовал с -i
, -it
, -t
и просто -d
- но результат всегда один и тот же:
===== Begin GnuPG log =====
gpg: using "<supersecret>" as default secret key for signing
gpg: signing failed: Not a tty
gpg: [stdin]: sign+encrypt failed: Not a tty
===== End GnuPG log =====
GPG error detail: Traceback (most recent call last):
File "/usr/bin/duplicity", line 1532, in <module>
with_tempdir(main)
File "/usr/bin/duplicity", line 1526, in with_tempdir
fn()
File "/usr/bin/duplicity", line 1380, in main
do_backup(action)
File "/usr/bin/duplicity", line 1508, in do_backup
incremental_backup(sig_chain)
File "/usr/bin/duplicity", line 662, in incremental_backup
globals.backend)
File "/usr/bin/duplicity", line 425, in write_multivol
at_end = gpg.GPGWriteFile(tarblock_iter, tdp.name, globals.gpg_profile, globals.volsize)
File "/usr/lib/python2.7/site-packages/duplicity/gpg.py", line 356, in GPGWriteFile
file.close()
File "/usr/lib/python2.7/site-packages/duplicity/gpg.py", line 241, in close
self.gpg_failed()
File "/usr/lib/python2.7/site-packages/duplicity/gpg.py", line 226, in gpg_failed
raise GPGError(msg)
GPGError: GPG Failed, see log below:
===== Begin GnuPG log =====
gpg: using "<supersecret>" as default secret key for signing
gpg: signing failed: Not a tty
gpg: [stdin]: sign+encrypt failed: Not a tty
===== End GnuPG log =====
это Not a tty
ошибка в то время как gpg пытается подписать, странно.
Казалось, раньше это не было проблемой, или я немного сумасшедшим печатал в позднюю ночную смену, что это сработало однажды, но теперь он просто не хочет больше работать.
1 ответ
Для тех, кто борется с той же проблемой, я нашел ответ благодаря разработчику duply
https://sourceforge.net/p/ftplicity/bugs/76/
Короче нужно добавить GPG_OPTS='--pinentry-mode loopback'
начиная с gpg 2.1 и добавить allow-loopback-pinentry
в .gnupg/gpg-agent.conf
Это приблизило меня к рабочей настройке.