Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

dev.khosromanesh's avatar

can not connect to mysql with php code | used docker

i use WordPress want to use docker and deploy on a server problem is i can use WordPress but when want to use duplicator to transfer my site errored that can not connect to MySQL problem is wordpress itself can connect to db but other php codes can not docker-compose.yml file with following code

version: '3'

services:
  # Database
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - wpsite
  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: password
    networks:
      - wpsite
  # Wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80'
    restart: always
    volumes: ['./:/var/www/html']
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    networks:
      - wpsite


  php:
    image: php:7.4
    volumes: ['./:/var/www/html']
    networks:
      - wpsite

networks:
  wpsite:
volumes:
  db_data:

also i write a PHP code to test can connect to db but also also in path of localhost:8000/test.php got error 500 status code if i delete codes that connect to db 500 error code will removed and work normal

0 likes
7 replies
enoch91's avatar
enoch91
Best Answer
Level 2

@dev.khosromanesh Your PHP container in your setup uses the php:7.4 image, which might not come with the MySQL extensions installed by default. You can customize your PHP Dockerfile to install these extensions.

FROM php:7.4

# Install necessary extensions
RUN docker-php-ext-install mysqli pdo pdo_mysql

# Copy your application code
COPY . /var/www/html

WORKDIR /var/www/html

Update your docker-compose.yml php service to use the custom Dockerfile for the php service

# PHP for custom scripts
  php:
    build:
      context: .
      dockerfile: Dockerfile
    volumes: ['./:/var/www/html']
    networks:
      - wpsite
dev.khosromanesh's avatar

replace PHP for custom scripts with old one add docker file composer down composer up but got error on page locoalhost:8000/test.php error still exist

enoch91's avatar

@dev.khosromanesh you need to re-build your docker-compose

PS: Ensure that your test.php file is correctly placed in the web root directory (./).

docker-compose down
docker-compose build
docker-compose up -d
dev.khosromanesh's avatar

in test.php if i delete $mysqli = new mysqli("localhost", "wordpress", "password", "wordpress"); line it work normal

docker-compose down
docker-compose build
docker-compose up -d

run in order but error still exist

enoch91's avatar

@dev.khosromanesh Modify your test.php script to use the correct hostname and credentials. Note that when connecting from one Docker container to another, you should use the service name (in this case, db) as the hostname instead of localhost.

// test.php file

$servername = "db";
$username = "wordpress";
$password = "wordpress";
$dbname = "wordpress";

$mysqli = new mysqli($servername, $username, $password, $dbname);
dev.khosromanesh's avatar

docker-compose.yml

version: '3'

services:
  # Database
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - wpsite
  # phpmyadmin
  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: password
    networks:
      - wpsite
  # Wordpress
  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - '8000:80'
    restart: always
    volumes: ['./:/var/www/html']
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    networks:
      - wpsite


  # PHP for custom scripts
  php:
    build:
      context: .
      dockerfile: Dockerfile
    volumes: [ './:/var/www/html' ]
    networks:
      - wpsite


networks:
  wpsite:
volumes:
  db_data:

Dockerfile

FROM php:7.4

# Install necessary extensions
RUN docker-php-ext-install mysqli pdo pdo_mysql

# Copy your application code
COPY . /var/www/html

WORKDIR /var/www/html

Please or to participate in this conversation.