This is a read-only copy of the MariaDB Knowledgebase generated on 2025-04-20. For the latest, interactive version please visit https://mariadb.com/kb/.

MariaDB on host and Docker container

Hello, I have a Laravel project that connects to a MariaDB database. I don't want to use a MariaDB container. I have installed MariaDB on the host and added the following line to the /etc/mysql/mariadb.conf.d/50-server.cnf file:

bind-address = 0.0.0.0

MariaDB is running on the host:

# netstat -tulnp | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      3172972/mariadbd 

I edited the `.env` file as follows:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=123456

I also changed the `database.php` file of the Laravel project as follows:

 'mariadb' => [
            'driver' => 'mariadb',
            'url' => env('DB_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel_db'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => env('DB_CHARSET', 'utf8mb4'),
            'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

The compose file looks like this:

services:
  frontend:
    container_name: frontend
    build:
      context: /home/dev/frontend
      dockerfile: Dockerfile
    environment:
      - NODE_ENV=development
      - CHOKIDAR_USEPOLLING=true  
      - WATCHPACK_POLLING=true   
    volumes:
      - /home/dev/frontend:/app
      - /app/node_modules          
    ports:
      - "127.0.0.1:3000:3000"              
    networks:
      - app_network
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M

  # Laravel Backend
  backend:
    build:
      context: /home/dev/portal
      dockerfile: Dockerfile
    container_name: backend
    entrypoint: ["/usr/local/bin/entrypoint.sh"]
    command: ["php-fpm"]
    environment:
      APP_ENV: local
      APP_DEBUG: "true"
      DB_HOST: host.docker.internal
      DB_PORT: 3306
      DB_DATABASE: laravel_db
      DB_USERNAME: root
      DB_PASSWORD: 123456
      XDEBUG_CONFIG: "client_host=host.docker.internal client_port=9003"
    volumes:
      - /home/dev/portal:/var/www
    networks:
      - app_network
    ports:
      - "9000:9000"
    extra_hosts:
      - "host.docker.internal:host-gateway"

networks:
  app_network:
    driver: bridge

After these settings, I ran the containers and connected to the backend container:

# docker exec -u root -it backend bash
#
# nc HOST_IP -v 80
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Connected to 172.20.2.58:80.
#
# nc HOST_IP -v 3306
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: No route to host.

As you can see, from inside the container I can connect to port 80 which is for Nginx, but I can't connect to MariaDB.

Which part of the settings is wrong?

Thank you.

Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.