Ошибка "не 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

Это приблизило меня к рабочей настройке.

Другие вопросы по тегам