Protože vám chybí propojení jste db kontejner s php. Když propojíte db s PHP, bude přístupný z localhost PHP.
Zde jsem upravil váš soubor docker-compose, protože mám rád alpine všude;). A místo kontroly úrovně kódu používám správce a propojení s db k ověření připojení. Protože nemám php docker soubor, tak vytvářím php:alpine, který obsahuje 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
Poté jsem nainstaloval mysqli do kontejneru php
docker exec -it php ash
a spusťte pod příkazem
docker-php-ext-install mysqli;
Poté vytvořte test.php
zde je název serveru db . Všimněte si, že název vašeho serveru bude stejný jako název kontejneru db, který je odkazem na php.pokud ping db
v kontejneru php bude ping db kontejner.
<?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";
?>
Nyní spusťte tento soubor v kontejneru php. Můžete připojit a spustit svůj php kód, ale toto jsem udělal pro testování. A zkusil jsem to jako uživatel root.
php -f test.php
A zde je adminer, který také odkazuje na db