docker-compose.yml环境变量到php环境变量

oso*_*den 6 php environment environment-variables docker

尝试执行以下操作: 将环境值从 .env 文件传播到 php 文件环境值。

在 .env 文件中设置 MYSQL 变量。

#cat .env
MYSQL_ROOT_PASSWORD=RootPassword
MYSQL_USER=gnf_user
MYSQL_PASSWORD=UserPassword
MYSQL_DATABASE=gnf_noah
MYSQL_HOST=db
Run Code Online (Sandbox Code Playgroud)

我希望将其传播到我的容器中。所以我这样做:

#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 ;-)
Run Code Online (Sandbox Code Playgroud)

现在,尝试在我的容器中获取这些值:

$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');
Run Code Online (Sandbox Code Playgroud)

给出空值。

我是否在完全错误的页面上..或者我是否需要一个脚本来在构建时设置这些值,例如。在/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
Run Code Online (Sandbox Code Playgroud)

Neo*_*son 7

尝试env_file在撰写文件中使用来引用您的.env.

\n

这是一个最小的例子:

\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker-compose.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Dockerfile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .env\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.php\n
Run Code Online (Sandbox Code Playgroud)\n

Dockerfile

\n
FROM php:7.0-apache\nCOPY ./index.php /var/www/html/\n
Run Code Online (Sandbox Code Playgroud)\n

索引.php

\n
<?php\n    $db_host = getenv(\'MYSQL_HOST\', true) ?: getenv(\'MYSQL_HOST\');\n    $db_name = getenv(\'MYSQL_DATABASE\', true) ?: getenv(\'MYSQL_DATABASE\');\n    $db_user = getenv(\'MYSQL_USER\', true) ?: getenv(\'MYSQL_USER\');\n    $db_pwd  = getenv(\'MYSQL_PASSWORD\', true) ?: getenv(\'MYSQL_PASSWORD\');\n\n    echo "db_host: {$db_host}<br>";\n    echo "db_name: {$db_name}<br>";\n    echo "db_user: {$db_user}<br>";\n    echo "db_pwd: {$db_pwd}<br>";\n?>\n
Run Code Online (Sandbox Code Playgroud)\n

docker-compose.yml

\n
version: "3.2"\nservices:\n www:\n  build: . \n  ports:\n  - "30001:80"\n  - "30443:443"\n  env_file:\n    - .env\n
Run Code Online (Sandbox Code Playgroud)\n

.env

\n
MYSQL_ROOT_PASSWORD=RootPassword\nMYSQL_USER=gnf_user\nMYSQL_PASSWORD=UserPassword\nMYSQL_DATABASE=gnf_noah\n
Run Code Online (Sandbox Code Playgroud)\n

组合容器:

\n
docker-compose up -d --build\n
Run Code Online (Sandbox Code Playgroud)\n

在此输入图像描述

\n