为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
Smart猫小萌 2023-10-15 16:57:36
尝试执行以下操作: 将环境值从 .env 文件传播到 php 文件环境值。在 .env 文件中设置 MYSQL 变量。#cat .envMYSQL_ROOT_PASSWORD=RootPasswordMYSQL_USER=gnf_userMYSQL_PASSWORD=UserPasswordMYSQL_DATABASE=gnf_noahMYSQL_HOST=db我希望将其传播到我的容器中。所以我这样做:#cat docker-compose.ymlversion: "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 Dockerfiledrwxr-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-extensionsdrwxr-xr-x  2 root root  4096 Aug 13 08:36 mysqldrwxrwxr-x 25 root 1005  4096 Aug 18 05:40 www
查看完整描述

2 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

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


这是一个最小的例子:


.

├── docker-compose.yml

├── Dockerfile

├── .env

└── index.php

Dockerfile


FROM php:7.0-apache

COPY ./index.php /var/www/html/

索引.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

https://img1.sycdn.imooc.com/652ba9be0001062e04280171.jpg

查看完整回答
反对 回复 2023-10-15
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

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

例如

web:
  env_file:
    - .env

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


查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信