So I have a set of Docker services (running on Ubuntu) that are almost working at the moment:
- php/apache webserver
- MySQL server
- PHPMyAdmin webserver
I have them set up in the docker-compose defined below, and the PHPMyAdmin is able to interface with the SQL server, but using the PHP connection script below, and calling db_connect()
, gives the following error page:
Warning: mysqli::__construct():(HY000/2002): No such file or directory in /var/www/html/api/sql_db.php on line 12
MySQLi Connection failed: No such file or directory
SESSION: Array ( [sql_server] => db [username] => root[password] => test [dbname] => bravo
File containing db_connect()
:
<?php
session_start();
$servername = "db";
$username = "root";
$password = "test";
$dbname = "bravo";
$_SESSION['sql_server'] = $servername;
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['dbname'] = $dbname;
function db_connect(){
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_errno) {
printf("MySQLi Connection failed: %s
", $conn->connect_error."<br>SESSION: ");
print_r($_SESSION);
session_destroy();
unset($_SESSION);
exit();
}
}
docker-compose.yml
:
version: '3'
services:
db:
image: mysql:5.7.23
container_name: db
command: --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
environment:
MYSQL_DATABASE: bravo
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
restart: always
volumes:
- ./dump:/docker-entrypoint-initdb.d
- ./db/data/mysql:/var/lib/mysql
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db
ports:
- 8000:80
environment:
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
depends_on:
- db
websrv:
build: .
ports:
- 8080:80
volumes:
- ./www:/var/www/html
links:
- db
networks:
- default
depends_on:
- db
and finally, the Dockerfile
referenced by the docker-compose
for the websrv
service:
FROM php:7.1.2-apache
RUN docker-php-ext-install mysqli
I've gone through a number of forum posts on why mysqli wouldn't connect, but I haven't found an answer that solves my problem yet.
I've tried getting the internal ip of the docker container as well, but I haven't had any luck.
My choice of the docker images was a result of me trying to simply get php & mysqli, phpMyAdmin, and MySQL all working together. Any functioning combination of the three would be great for me, but surprisingly I haven't really found any public repo that's done it yet.
Thanks for any pointers.