Perché manca il collegamento il tuo contenitore db con php. Quando colleghi db con PHP, sarà accessibile da localhost di PHP.
Ecco che ho modificato il tuo file di composizione mobile perché mi piace alpine ovunque;). E uso l'amministratore e mi collego con db per verificare la connessione invece del controllo del livello di codice. Dato che non ho il tuo file docker php, sto creando php:alpine che 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
Quindi ho installato mysqli nel contenitore php
docker exec -it php ash
ed esegui sotto il comando
docker-php-ext-install mysqli;
Quindi crea test.php
qui il nome del server è db . Nota che il nome del tuo server sarà quello che è il nome del contenitore db che è collegato a php.se ping db
nel contenitore php eseguirà il ping del contenitore 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";
?>
Ora esegui questo file nel contenitore php. Puoi montare ed eseguire il tuo codice php ma questo è quello che ho fatto per il test. E ho provato come utente root.
php -f test.php
Ed ecco l'amministratore che si collega anche a db