Приложение
My Flask не может видеть переменные среды, установленные в docker -compose, но python в контейнере может. Есть идеи, как я могу получить Flask, чтобы их тоже увидеть? Я думаю, что проблема в том, что Apache не передает переменную среды, но я не могу заставить ее пройти.
Эта ошибка появляется, когда я запускаю веб-сервер apache внутри docker container:
Starting Apache httpd web server: apache2[Tue Jun 16 23:12:00.810164 2020] [env:warn] [pid 1311:tid 139882286290048] AH01506: PassEnv variable TEST was undefined
Я определяю свою переменную среды в docker compose, например:
ai:
image: ai:dev
environment:
TEST: test
Затем я беру объект среды ОС в коде, выводю его и получите это:
environ({'APACHE_RUN_DIR': '/var/run/apache2', 'APACHE_PID_FILE': '/var/run/apache2/apache2.pid', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'APACHE_LOCK_DIR': '/var/lock/apache2', 'LANG': 'C', 'APACHE_RUN_USER': 'www-data', 'APACHE_RUN_GROUP': 'www-data', 'APACHE_LOG_DIR': '/var/log/apache2', 'PWD': '/'})
Если я go в контейнер и загружу python и попробую, я получу следующее:
environ({'HOSTNAME': 'd3ce1f616cad', 'PYTHON_VERSION': '3.8.2', 'PWD': '/app', 'HOME': '/root', 'LANG': 'C.UTF-8', 'GPG_KEY': 'E3FF2839C048B25C084DEBE9B26995E310250568', 'PYTHONPATH': ':/app', 'TERM': 'xterm', 'SHLVL': '1', 'PYTHON_PIP_VERSION': '20.0.2', 'PYTHON_GET_PIP_SHA256': '421ac1d44c0cf9730a088e337867d974b91bdce4ea2636099275071878cc189e', 'PYTHON_GET_PIP_URL': 'https://github.com/pypa/get-pip/raw/d59197a3c169cef378a22428a3fa99d33e080a5d/get-pip.py', 'PATH': '/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'TEST': 'test', '_': '/usr/local/bin/python'})
Тестовая переменная есть.
Почему python в контейнере может видеть переменную, а мое приложение flask в том же контейнере не может? Вот файлы wsgi и conf, если они помогут:
ai.wsgi:
`#!/usr/bin/python3.8
import sys
import logging
import os
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0,"/var/www/ai/")
from ai import app as application`
ai.conf:
Listen 443
<VirtualHost *:443>
ServerName 192.168.1.103
ServerAdmin admin@tsames.ca
WSGIScriptAlias / /var/www/ai/ai.wsgi
<Directory /var/www/ai/ai/>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/ai-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/ai-access.log combined
PassEnv TEST
</VirtualHost>