猿问

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

尝试执行以下操作: 将环境值从 .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


Smart猫小萌
浏览 164回答 2
2回答

红糖糍粑

尝试env_file在撰写文件中使用来引用您的.env.这是一个最小的例子:.├── docker-compose.yml├── Dockerfile├── .env└── index.phpDockerfileFROM php:7.0-apacheCOPY ./index.php /var/www/html/索引.php<?php&nbsp; &nbsp; $db_host = getenv('MYSQL_HOST', true) ?: getenv('MYSQL_HOST');&nbsp; &nbsp; $db_name = getenv('MYSQL_DATABASE', true) ?: getenv('MYSQL_DATABASE');&nbsp; &nbsp; $db_user = getenv('MYSQL_USER', true) ?: getenv('MYSQL_USER');&nbsp; &nbsp; $db_pwd&nbsp; = getenv('MYSQL_PASSWORD', true) ?: getenv('MYSQL_PASSWORD');&nbsp; &nbsp; echo "db_host: {$db_host}<br>";&nbsp; &nbsp; echo "db_name: {$db_name}<br>";&nbsp; &nbsp; echo "db_user: {$db_user}<br>";&nbsp; &nbsp; echo "db_pwd: {$db_pwd}<br>";?>docker-compose.ymlversion: "3.2"services:&nbsp;www:&nbsp; build: .&nbsp;&nbsp; ports:&nbsp; - "30001:80"&nbsp; - "30443:443"&nbsp; env_file:&nbsp; &nbsp; - .env.envMYSQL_ROOT_PASSWORD=RootPasswordMYSQL_USER=gnf_userMYSQL_PASSWORD=UserPasswordMYSQL_DATABASE=gnf_noah组合容器:docker-compose up -d --build

泛舟湖上清波郎朗

要直接在容器中创建.env文件的环境变量,我们使用docker的env_file配置选项例如web: &nbsp;&nbsp;env_file: &nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;.env这是将环境变量列表传递到容器中的最微妙的方法。
随时随地看视频慕课网APP
我要回答