Karena Anda kehilangan tautan Anda db wadah dengan php. Saat Anda menautkan db dengan PHP, itu akan dapat diakses dari localhost PHP.
Ini saya memodifikasi file docker-compose Anda seperti yang saya suka alpine di mana-mana;). Dan saya menggunakan adminer dan menautkan dengan db untuk memverifikasi koneksi alih-alih memeriksa level kode. Karena saya tidak memiliki file buruh pelabuhan php, jadi saya membuat php:alpine yang berisi 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
Kemudian saya menginstal mysqli di wadah php
docker exec -it php ash
dan jalankan perintah di bawah ini
docker-php-ext-install mysqli;
Kemudian buat test.php
di sini nama server adalah db . Perhatikan bahwa nama server Anda adalah nama wadah db yang ditautkan ke php.jika Anda ping db
dalam wadah php ia akan melakukan ping wadah 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";
?>
Sekarang jalankan file ini dalam wadah php. Anda dapat memasang dan menjalankan kode php Anda, tetapi inilah yang saya lakukan untuk pengujian. Dan saya mencoba sebagai pengguna root.
php -f test.php
Dan ini admin yang juga terhubung dengan db