Som du mangler link du db container med php. Når du forbinder db med PHP, vil det være tilgængeligt fra localhost af PHP.
Her er jeg ændret din docker-compose fil, da jeg kan lide alpine overalt;). Og jeg bruger adminer og link med db for at bekræfte forbindelsen i stedet for kontrol af kodeniveau. Da jeg ikke har din php docker-fil, så laver jeg php:alpine, som indeholder 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
Så installerede jeg mysqli i php container
docker exec -it php ash
og kør under kommandoen
docker-php-ext-install mysqli;
Opret derefter test.php
her er servernavnet db . Bemærk, at dit servernavn vil være det, der er db containernavn, som er link til php.hvis du ping db
i php-container vil den pinge db-container.
<?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";
?>
Kør nu denne fil i php container. Du kan montere og køre din php-kode, men dette er, hvad jeg gjorde for at teste. Og jeg prøvede som root-bruger.
php -f test.php
Og her er adminer som også linker med db