I want to show an env var in my docker container.
The PHP script looks like this:
<html>
<head>
<title>Show Use of environment variables</title>
</head>
<body>
<?php
print "env is: ".$_ENV["USER"]."\n";
?>
</body>
</html>
I use OpenShift to start the container. The PHP - container shows:
env is:
Now I change the dc config of my container:
oc env dc/envar USER=Pieter
deploymentconfig "envar" updated
When I access the container. The env var of USER is Pieter
docker exec -it 44a0f446ae36 bash
bash-4.2$ echo $USER
Pieter
But my script remains showing: "env is:
" It does not fill in the variable.
Change
print "env is: ".$_ENV["USER"]."\n";
to
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>
/ #
I did the following to solve this issue:
Use this command that writes the environment variables to a file called .env in your project folder.
CMD ["env >> /path/to/project/.env"]
Install dotenv package that loads the env variables from a file to $_ENV
composer require vlucas/phpdotenv
Load the package and use it as
require 'vendor/autoload.php'
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
getenv('VAR_NAME');
Hope it helps.