Da fehlt Ihnen die Verlinkung Sie DB-Container mit php. Wenn Sie db mit PHP verknüpfen, wird es von localhost von PHP aus zugänglich sein.
Hier habe ich Ihre Docker-Compose-Datei modifiziert, da ich Alpine überall mag;). Und ich verwende adminer und link with db, um die Verbindung zu überprüfen, anstatt die Codeebene zu überprüfen. Da ich Ihre PHP-Docker-Datei nicht habe, erstelle ich php:alpine, die php7 enthält.
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
Dann habe ich mysqli im PHP-Container installiert
docker exec -it php ash
und führen Sie den folgenden Befehl
ausdocker-php-ext-install mysqli;
Erstellen Sie dann test.php
hier ist der Servername db . Beachten Sie, dass Ihr Servername der Name des DB-Containers ist, der ein Link zu php ist. Wenn Sie ping db
ausführen im PHP-Container wird der DB-Container gepingt.
<?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";
?>
Führen Sie diese Datei nun im PHP-Container aus. Sie können Ihren PHP-Code mounten und ausführen, aber das habe ich zum Testen getan. Und ich habe es als Root-Benutzer versucht.
php -f test.php
Und hier ist der Administrator, der auch mit db verknüpft ist