PHP-docker容器中的环境变量

时间:2016-02-18 10:48:45

标签: php docker environment-variables openshift openshift-origin

我想在我的docker容器中显示一个env var。 PHP脚本如下所示:

<html>
 <head>
  <title>Show Use of environment variables</title>
 </head>
 <body>
  <?php
  print "env is: ".$_ENV["USER"]."\n";
  ?>
 </body>
</html>

我使用OpenShift启动容器。 PHP - 容器显示:

env is: 

现在我更改了容器的dc配置:

oc env dc/envar USER=Pieter
deploymentconfig "envar" updated

当我访问容器时。 USER的env变量是Pieter

docker exec -it 44a0f446ae36 bash
bash-4.2$ echo $USER
Pieter

但我的剧本仍在显示:&#34; env is:&#34;它没有填写变量。

3 个答案:

答案 0 :(得分:1)

更改

print "env is: ".$_ENV["USER"]."\n";

print "env is: ".getenv("USER")."\n";

/# cat test.php
<html>
 <head>
  <title>Show Use of environment variables</title>
 </head>
 <body>
  <?php
  print "env via \$_ENV is: ".$_ENV["USER"]."\n";
  print "env via getenv is: ".getenv("USER")."\n";
  ?>
 </body>
</html>
/ #
/ # export USER=Sascha
/ # echo $USER
Sascha
/ # php test.php 
<html>
 <head>
  <title>Show Use of environment variables</title>
 </head>
 <body>
  PHP Notice:  Array to string conversion in /test.php on line 7
PHP Notice:  Undefined index: USER in /test.php on line 7
env via $_ENV is: 
env via getenv is: Sascha
 </body>
</html>
/ # 

答案 1 :(得分:0)

我做了以下操作来解决此问题:

  1. 使用此命令将环境变量写入项目文件夹中名为.env的文件。

    CMD ["env >> /path/to/project/.env"]
    
  2. 安装dotenv软件包,该软件包将环境变量从文件加载到$ _ENV

    composer require vlucas/phpdotenv
    
  3. 加载程序包并将其用作

    require 'vendor/autoload.php'
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
    getenv('VAR_NAME');
    

希望有帮助。

答案 2 :(得分:-1)

您只需要使用不同的引号,它对我来说就是有用的

<html>
 <head>
  <title>Show Use of environment variables</title>
 </head>
 <body>
  <?php
  print "env is: ".$_ENV['USER'];
  ?>
 </body>
</html>