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

时间:2020-08-18 05:09:55

标签: php docker environment-variables environment

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

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

        $currUser = Auth::User();
        ### search
        //$output_product = $currUser->products()->where('product_id', $product_id)->first();
        $output_product = DB::table('products')
            ->select('products.title', 'products.description', 'product_variants.price', 'product_variants.quantity', 'products.product_id', 'product_images.imgurl')
            ->join('product_variants', 'products.product_id', '=', 'product_variants.product_id')
            ->join('product_images', 'product_variants.id', '=', 'product_images.variant_id')
            ->where('products.product_id', $product_id)
            ->get();
        return $output_product;
                        
        }

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

#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 ;-)

给出空值。

我是在完全错误的页面上吗?还是我需要一个脚本来在构建时设置这些值,例如。在/docker-entrypoint-init.d中”还是类似的东西?

(编辑)使用的文件:

$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');

2 个答案:

答案 0 :(得分:2)

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

这是一个最小的示例:

.
├── docker-compose.yml
├── Dockerfile
├── .env
└── index.php

Dockerfile

FROM php:7.0-apache
COPY . /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

enter image description here

答案 1 :(得分:1)

要直接在容器中创建.env文件的环境变量,我们使用docker的 env_file 配置选项

例如

web:
  env_file:
    - .env

这是将一系列环境变量传递到容器中的最微妙的方法。

相关问题