将环境variables暴露给Apache和PHP
背景
我正在尝试使用Wercker来运行我的PHP应用程序的testing。 Wercker使用Docker容器来设置testing环境来执行testing。它使用环境variables来公开任何连接服务(如MySQL和Elasticsearch)的连接参数。 示例MYSQL_PORT_3306_TCP_ADDR = 127.0.1.1
我的核心Docker容器运行Ubuntu 14.04,PHP和Apache已经安装在容器上。
问题
我似乎无法通过php $ _SERVER或$ _ENV通过Apache运行时访问环境variables。 如果我通过CLI php ./db_connect.php
运行脚本,或者如果我使用其在服务器php -S localhost:8000
版本运行PHP,它工作正常。 但是,如果我尝试通过Apache虚拟主机访问一个页面,则环境variables不可用。
进展
我已经安装了Apache,用于允许环境variables的mod“我认为”
sudo a2enmod env sudo service apache2 restart
我试图访问我的脚本中的环境variables。
$database_host = $_SERVER["MYSQL_PORT_3306_TCP_ADDR"]; $database_username = $_SERVER["MYSQL_ENV_MYSQL_USER"]; $database_password = $_SERVER["MYSQL_ENV_MYSQL_PASSWORD"]; $database_name = $_SERVER["MYSQL_ENV_MYSQL_DATABASE"]; $elasticsearch_host = $_SERVER["ELASTICSEARCH_PORT_9300_TCP_ADDR"];
我可以在我的.htaccess中添加新的variables,我只是没有得到所有的系统环境variables。
SetEnv TEST_VAR test
我已经读过这个问题如何在运行CLI和Apache2Handler时将系统环境variables导入到PHP中? 但我不确定它的build议。
题
如何将系统环境variables暴露给Apache和PHP?
使用docker-compose,你可以通过php的$_ENV
variables检索docker-compose.yml文件environment
选项设置的操作系统的环境variables。
version: 2 services: web: build: php:5.6-apache environment: MYSQL_USER: "user" MYSQL_PASSWORD: "passwd"
应该给你
$_ENV['MYSQL_USER'] = user $_ENV['MYSQL_PASSWORD'] = passwd
我不确定Wercker如何将环境variables映射到容器,但是我认为这可能会有所帮助https://github.com/wercker/wercker/issues/63
- Docker化的Apache服务器不公开端口80
- 如何debuggingREDIS,APACHE发出一个Docker容器?
- Docker / PHP5 / Apache中的PHP文件正在输出源代码,不执行PHP
- Apache SuperSet中的Oauthauthentication
- 通过Apache主机向Docker容器发送代理请求
- 使用“容器IP”连接到docker集装箱
- 在Kubernetes集群中的自定义docker容器与使用Stackdriver的日志
- 服务“networking”未能build立:lstat apache / sites-enabled / 000-default.conf:没有这样的文件或目录
- Docker与Apache正在循环重启