Como te faltan enlaces tu contenedor de base de datos con php. Cuando vincule db con PHP, será accesible desde localhost de PHP.
Aquí está, modifiqué su archivo docker-compose como me gusta alpine en todas partes;). Y uso administrador y enlace con db para verificar la conexión en lugar de verificar el nivel de código. Como no tengo su archivo php docker, estoy creando php:alpine que contiene php7.
version: "3"
services:
nginx:
image: nginx:1.13-alpine
container_name: nginx
ports:
- "8081:80"
command: nginx -g "daemon off;"
db:
image: mysql:5.5
environment:
MYSQL_ROOT_PASSWORD: example
php:
image: php:alpine
container_name: php
tty: true
links:
- db
adminer:
image: adminer
container_name: adminer
ports:
- 8080:8080
links:
- db
Luego instalé mysqli en el contenedor php
docker exec -it php ash
y ejecute debajo del comando
docker-php-ext-install mysqli;
Luego crea test.php
aquí el nombre del servidor es db . Tenga en cuenta que el nombre de su servidor será el nombre del contenedor de base de datos que es un enlace a php. Si ping db
en el contenedor php hará ping al contenedor db.
<?php
$servername = "db";
$username = "root";
$password = "example";
// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
Ahora ejecute este archivo en el contenedor php. Puede montar y ejecutar su código php, pero esto es lo que hice para probar. Y lo intenté como usuario root.
php -f test.php
Y aquí está el administrador que también se vincula con db