从.env或dockerFile / docker-compose.yml获取env变量,配置,php连接到mysql数据库

时间:2018-04-22 18:21:26

标签: php docker docker-compose

我想在docker中定义一个env变量,而不是硬编码db_username和密码。我是Docker的新手,所以有些东西我还需要了解更多。

我想问的另一个问题是,如果有人想要运行我的容器,比如从github克隆,他们必须自己设置env变量才能连接到db吗?创建.env和类似的东西..

的config.php

<?php

define('DB_SERVER', getenv('DB_SERVER'));
define('DB_USERNAME', getenv('DB_USERNAME'));
define('DB_PASSWORD', getenv('DB_PASSWORD')); 
define('DB_NAME', getenv('DB_NAME'));

$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if ($link === false) {
    die ("ERROR: Could not connect. " . mysqli_connect_error());
}

?>

.ENV

DB_SERVER=db
DB_USERNAME=dbuser
DB_PASSWORD=dbpassword
DB_NAME=company

搬运工-compose.yml

db:
  build: ./backend
  restart: always
  ports:
    - "3306:3306"
  volumes:
    - /var/lib/mysql
  environment:
    - MYSQL_ROOT_PASSWORD=dbpassword
php:
  build: ./frontend
  ports:
    - "80:80"
  volumes: 
    - ./frontend:/var/www/html
  environment:
    - DB_SERVER=${DB_SERVER}
    - DB_USERNAME=${DB_USERNAME}
    - DB_PASSWORD=${DB_PASSWORD}
    - DB_NAME=${DB_NAME}
  env_file: ./.env
  links:
    - db
./frontend中的Dockerfile

FROM php:7.2-apache

RUN docker-php-ext-install mysqli

WORKDIR /var/www/html

COPY . /var/www/html/

./backend中的Dockerfile

FROM mysql:5.7

COPY ./demo.sql /docker-entrypoint-initdb.d

我不知道它现在的方式是将变量形成env文件,当我使用docker-compose运行时,转到192.168.99.100,我的应用程序正在运行,但我得到了

在.yml文件中,我认为我不需要设置环境变量,但我正在测试是否可以获取变量,直接输入config.php,对于将运行我的容器的人,只需要运行“docker-compose up”而不是设置所有内容。

  

警告:mysqli_connect():( HY000 / 1045):拒绝用户访问   'dbuser'@'172.17.0.3'(使用密码:YES)in   第8行的/var/www/html/config.php

我不知道如何解决这个问题。所以基本上,这是两个问题,为什么会出现这个错误,如果我正在做正确的环境变量。

2 个答案:

答案 0 :(得分:0)

我设法让它工作,我真的不知道我改变了什么,但基本上我从environment:容器中删除了php,然后转移到db容器,使用dockerhub中的mysql image env变量。

答案 1 :(得分:0)

我已经解决了这个问题 您需要添加变量PHP_FPM_CLEAR_ENV = no

environment:
  - PHP_FPM_CLEAR_ENV=no

之后一切正常!