docker-compose.yml 环境变量到 php 环境变量
docker-compose.yml environment variable to php environment variable
尝试执行以下操作:将环境值从 .env 文件传播到 php 文件环境值。
在 .env 文件中设置 MYSQL 个变量。
#cat .env
MYSQL_ROOT_PASSWORD=RootPassword
MYSQL_USER=gnf_user
MYSQL_PASSWORD=UserPassword
MYSQL_DATABASE=gnf_noah
MYSQL_HOST=db
我希望将其传播到我的容器。所以我这样做:
#cat docker-compose.yml
version: "3.2"
services:
www:
build: . #Include Dockerfile in current directory
ports:
- "30001:80"
- "30443:443"
expose:
- "80"
- "443"
volumes:
- "var:/var/www/html/var/"
environment:
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
networks:
- frontend
- backend
links:
- db:db
# shortend for readability ;-)
现在,尝试在我的容器中获取这些值:
$db_host = getenv('MYSQL_HOST', true) ?: getenv('MYSQL_HOST');
$db_name = getenv('MYSQL_DATABASE', true) ?: getenv('MYSQL_DATABASE');
$db_user = getenv('MYSQL_USER', true) ?: getenv('MYSQL_USER');
$db_pwd = getenv('MYSQL_PASSWORD', true) ?: getenv('MYSQL_PASSWORD');
给出空值。
我是不是在完全错误的页面上..或者我是否需要一个脚本来在构建时设置这些值,例如。在 /docker-entrypoint-init.d" 或类似的东西中?
(编辑)使用的文件:
drwxr-xr-x 2 root root 4096 Aug 16 18:54 conf
-rw-r--r-- 1 root root 1406 Aug 17 17:17 docker-compose.yaml
-rw-r--r-- 1 root root 992 Aug 17 19:31 Dockerfile
drwxr-xr-x 2 root root 4096 Aug 17 14:45 dump
-rw-r--r-- 1 root root 125 Aug 17 07:06 .env
-rw-r--r-- 1 root root 55799 Aug 6 20:10 install-php-extensions
drwxr-xr-x 2 root root 4096 Aug 13 08:36 mysql
drwxrwxr-x 25 root 1005 4096 Aug 18 05:40 www
尝试在撰写文件中使用 env_file
来引用您的 .env
。
这是一个最小的例子:
.
├── docker-compose.yml
├── Dockerfile
├── .env
└── index.php
Docker 文件
FROM php:7.0-apache
COPY ./index.php /var/www/html/
index.php
<?php
$db_host = getenv('MYSQL_HOST', true) ?: getenv('MYSQL_HOST');
$db_name = getenv('MYSQL_DATABASE', true) ?: getenv('MYSQL_DATABASE');
$db_user = getenv('MYSQL_USER', true) ?: getenv('MYSQL_USER');
$db_pwd = getenv('MYSQL_PASSWORD', true) ?: getenv('MYSQL_PASSWORD');
echo "db_host: {$db_host}<br>";
echo "db_name: {$db_name}<br>";
echo "db_user: {$db_user}<br>";
echo "db_pwd: {$db_pwd}<br>";
?>
docker-compose.yml
version: "3.2"
services:
www:
build: .
ports:
- "30001:80"
- "30443:443"
env_file:
- .env
.env
MYSQL_ROOT_PASSWORD=RootPassword
MYSQL_USER=gnf_user
MYSQL_PASSWORD=UserPassword
MYSQL_DATABASE=gnf_noah
组成容器:
docker-compose up -d --build
要直接在容器中创建 .env 文件的环境变量,我们使用 env_file 配置选项 docker
例如
web:
env_file:
- .env
这是将环境变量列表传递到容器中的最巧妙的方法。
尝试执行以下操作:将环境值从 .env 文件传播到 php 文件环境值。
在 .env 文件中设置 MYSQL 个变量。
#cat .env
MYSQL_ROOT_PASSWORD=RootPassword
MYSQL_USER=gnf_user
MYSQL_PASSWORD=UserPassword
MYSQL_DATABASE=gnf_noah
MYSQL_HOST=db
我希望将其传播到我的容器。所以我这样做:
#cat docker-compose.yml
version: "3.2"
services:
www:
build: . #Include Dockerfile in current directory
ports:
- "30001:80"
- "30443:443"
expose:
- "80"
- "443"
volumes:
- "var:/var/www/html/var/"
environment:
MYSQL_HOST: ${MYSQL_HOST}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
restart: always
networks:
- frontend
- backend
links:
- db:db
# shortend for readability ;-)
现在,尝试在我的容器中获取这些值:
$db_host = getenv('MYSQL_HOST', true) ?: getenv('MYSQL_HOST');
$db_name = getenv('MYSQL_DATABASE', true) ?: getenv('MYSQL_DATABASE');
$db_user = getenv('MYSQL_USER', true) ?: getenv('MYSQL_USER');
$db_pwd = getenv('MYSQL_PASSWORD', true) ?: getenv('MYSQL_PASSWORD');
给出空值。
我是不是在完全错误的页面上..或者我是否需要一个脚本来在构建时设置这些值,例如。在 /docker-entrypoint-init.d" 或类似的东西中?
(编辑)使用的文件:
drwxr-xr-x 2 root root 4096 Aug 16 18:54 conf
-rw-r--r-- 1 root root 1406 Aug 17 17:17 docker-compose.yaml
-rw-r--r-- 1 root root 992 Aug 17 19:31 Dockerfile
drwxr-xr-x 2 root root 4096 Aug 17 14:45 dump
-rw-r--r-- 1 root root 125 Aug 17 07:06 .env
-rw-r--r-- 1 root root 55799 Aug 6 20:10 install-php-extensions
drwxr-xr-x 2 root root 4096 Aug 13 08:36 mysql
drwxrwxr-x 25 root 1005 4096 Aug 18 05:40 www
尝试在撰写文件中使用 env_file
来引用您的 .env
。
这是一个最小的例子:
.
├── docker-compose.yml
├── Dockerfile
├── .env
└── index.php
Docker 文件
FROM php:7.0-apache
COPY ./index.php /var/www/html/
index.php
<?php
$db_host = getenv('MYSQL_HOST', true) ?: getenv('MYSQL_HOST');
$db_name = getenv('MYSQL_DATABASE', true) ?: getenv('MYSQL_DATABASE');
$db_user = getenv('MYSQL_USER', true) ?: getenv('MYSQL_USER');
$db_pwd = getenv('MYSQL_PASSWORD', true) ?: getenv('MYSQL_PASSWORD');
echo "db_host: {$db_host}<br>";
echo "db_name: {$db_name}<br>";
echo "db_user: {$db_user}<br>";
echo "db_pwd: {$db_pwd}<br>";
?>
docker-compose.yml
version: "3.2"
services:
www:
build: .
ports:
- "30001:80"
- "30443:443"
env_file:
- .env
.env
MYSQL_ROOT_PASSWORD=RootPassword
MYSQL_USER=gnf_user
MYSQL_PASSWORD=UserPassword
MYSQL_DATABASE=gnf_noah
组成容器:
docker-compose up -d --build
要直接在容器中创建 .env 文件的环境变量,我们使用 env_file 配置选项 docker
例如
web:
env_file:
- .env
这是将环境变量列表传递到容器中的最巧妙的方法。