Omdat je links mist je db-container met php. Als je db aan PHP koppelt, is het toegankelijk vanaf de localhost van PHP.
Hier heb ik je docker-compose-bestand aangepast omdat ik overal alpine leuk vind;). En ik gebruik adminer en link met db om de verbinding te verifiëren in plaats van controle op codeniveau. Omdat ik je php docker-bestand niet heb, maak ik php:alpine die php7 bevat.
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
Toen installeerde ik mysqli in php-container
docker exec -it php ash
en voer het onderstaande commando uit
docker-php-ext-install mysqli;
Maak dan test.php
hier is de servernaam db . Merk op dat uw servernaam zal zijn wat de db-containernaam is, wat een link is naar php.if u ping db
in php container zal het db container pingen.
<?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";
?>
Voer dit bestand nu uit in php-container. U kunt uw php-code koppelen en uitvoeren, maar dit is wat ik deed om te testen. En ik heb het geprobeerd als rootgebruiker.
php -f test.php
En hier is de beheerder die ook linkt met db