version: '3' services: www: image: php-apache-custom container_name: my-php-apache ports: - "80:80" - "443:443" networks: - app-network db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: mydb MYSQL_USER: myuser MYSQL_PASSWORD: mypassword networks: - app-network phpmyadmin: image: phpmyadmin/phpmyadmin container_name: my-phpmyadmin ports: - "8001:80" environment: PMA_HOST: db PMA_PORT: 3306 networks: - app-network networks: app-network: driver: bridge
这是server.php
<?php
$connect = mysqli_connect(
'db', // Hostname (service name in docker-compose.yml)
'myuser', // Username
'mypassword', // Password
'mydb' // Database name
);
if (!$connect) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
# Use the official PHP image with Apache
FROM php:8.1-apache
# Install the necessary dependencies and extensions
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd mysqli pdo pdo_mysql
# Enable Apache mod_rewrite (common for PHP applications)
RUN a2enmod rewrite
<?php
session_start();
include "server.php"; // Make sure the filename is correct
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$email = $_POST["email"];
$password = $_POST["password"];....... continue
我在http:// localhost上打开它:3000/login.php
问题是我直接使用了普通的PHP图像,并且php容器中不包括扩展名。要解决此问题,我们需要安装mysqli
1,在运行容器中手动安装mysqli
启动PHP容器。 Access Cantainer的CLI:
mysqli
安装
docker exec -it <php-container> bash
扩展名:
mysqli
注:此方法是暂时的,如果重建容器,更改将丢失。
docker-php-ext-install mysqli
创建自动安装并启用
mysqli
扩展的自定义码头图像。
我最终采用了第二种方法,创建了一个自定义的Docker映像,从而解决了问题并确保一切顺利进行。