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.