#amazon-web-services #docker #environment-variables #amazon-elastic-beanstalk #supervisord
#amazon-веб-сервисы #docker #переменные среды #amazon-elastic-beanstalk #супервизор
Вопрос:
Я использую пользовательский контейнер Docker в AWS Elastic beanstalk для развертывания wep-приложения. Я мог бы установить переменные среды, такие как ключ API, секрет API и т.д., на веб-консоли AWS.(Elastic beanstalk => Конфигурация => Конфигурация программного обеспечения) Это сработало нормально.
Однако после того, как я изменил некоторые переменные на другие значения, содержащие специальные символы, с этой ошибкой это не сработало:
Docker container quit unexpectedly on Mon Oct 24 13:32:22 UTC 2016:
Error: Unexpected end of key/value pairs
For help, use /usr/bin/supervisord -h
В документе супервизора говорится Values containing non-alphanumeric characters should be quoted
.
Мой вопрос,
Существуют ли какие-либо способы заставить переменные среды со специальными символами, которые задаются в AWS elastic beanstalk, правильно обращаться к контейнеру docker, заключая их в кавычки?
Я попытался процитировать их на веб-консоли:
Переменные среды с двойными кавычками на веб-консоли
Но это не сработало:
Я полагаю, что AWS Elastic beanstalk по умолчанию не заключает двойные кавычки.
Для получения дополнительной информации. мой конфигурационный файл ebextension:
option_settings:
"aws:elasticbeanstalk:application:environment":
MY_VARIABLE: ""
MY_VARIABLE_QUOTED: ""
Конфигурационный файл супервизора:
[program:run_app]
environment=MY_VARIABLE=%(ENV_MY_VARIABLE)s,MY_VARIABLE_QUOTED=%(ENV_MY_VARIABLE_QUOTED)s
command=gunicorn my_app.wsgi:application -w 2 -b 0.0.0.0:8000 -t 300 --max-requests=100
directory=/var/www/my_app
user=root
stdout_logfile=/var/www/my_app/logs/django_stdout.log
stderr_logfile=/var/www/my_app/logs/django_stderr.log
autorestart=true
redirect_stderr=true
stopwaitsecs = 600
Комментарии:
1. Я только что нашел несколько обходных способов решения этих проблем.
2. Сначала я создал файл сценария оболочки
run_sv.sh
. Содержимое файла:#!/bin/sh MY_VARIABLE="${MY_VARIABLE}" MY_VARIABLE_QUOTED="${MY_VARIABLE_QUOTED}" supervisord -n -c /var/www/my_app/config/supervisor/test.conf
. Он запускает команду supervisor с предваряющими переменными, заключенными в двойные кавычки. Затем в Dockerfile я добавил эту строку в конце:CMD ["sh", "/var/www/my_app/conf/supervisor/run_sv.sh"]