PHP Docker app throwing error when submitting data to the database

Issue

I am new to docker and I am trying to dockerise a simple php registration app. When the credentials are hardcoded into the database connection file the application works as it should. However i introduced a .env file into the mix to store the credentials and since then i am getting an error whenever i click submit. Below are my code snippets:

Docker Compose

version: '3'

services:
  web:
    build: ./frontend
    ports:
      - "8000:80"
    stdin_open: true
    tty: true
    env_file:
      - ./env/mysql.env

  db:
    image: mysql:latest
    container_name: webappdb
    restart: always
    volumes:
      - /home/fikradev/dbvolume:/home/app
    env_file:
      - ./env/mysql.env

  monitor:
    image: phpmyadmin
    restart: always
    ports:
      - 8080:80
    environment:
      - PMA_ARBITRARY=1

volumes:
  db:

.env file contents

[email protected]
MYSQL_DATABASE=issuetrackdb
MYSQL_USER=dbuser
MYSQL_PASSWORD=password

dbconnect php file

<?php
$conn = mysqli_connect('webappdb', '${MYSQL_USER}', '${MYSQL_PASSWORD}', '${MYSQL_DATABASE}');

if($conn == false){
    die("ERROR - Could not connect: " . mysqli_connect_error());
}
?>

This is the error i am getting

Warning: mysqli_connect(): (HY000/1045): Access denied for user '${MYSQL_USER}'@'172.31.0.3' (using password: YES) in /var/www/html/dbconnect.php on line 2
ERROR - Could not connect: Access denied for user '${MYSQL_USER}'@'172.31.0.3' (using password: YES)

I have been on this for hours. Grateful if someone could point out where i am going wrong.

Solution

By setting a .env file in docker-compose.yml, you are providing variables to the environment your PHP application is running in. These are not automatically made available as variables in your PHP script. You can use getenv() to retrieve them:

$conn = mysqli_connect('webappdb', getenv('MYSQL_USER'), getenv('MYSQL_PASSWORD'), getenv('MYSQL_DATABASE'));

Answered By – rickdenhaan

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published