Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to connect mariadb running inside docker compose with python script running outside docker on host machine

I wrote a docker compose file and used docker compose up -d command. Then I wrote a simple python script to connect with maria db but I get error everytime.

mariadb version in my virtual environment is 1.0.11 pip install mariadb==1.0.11

version: '3.8'

services:
  mariadb:
    image: mariadb:latest
    container_name: my_mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrpass  
      MYSQL_DATABASE: db1   
      MYSQL_USER: user          
      MYSQL_PASSWORD: mypass  
    volumes:
      - mariadb-data:/var/lib/mysql  
    ports:
      - "3307:3307"  
volumes:
 mariadb-data: {} 

My python code:

import mariadb

host = "mariadb"
port = 3307
user = "user"
password = "mypass"
database = "db1"

try:
    conn = mariadb.connect(
        host=host,
        port=port,
        user=user,
        password=password,
        database=database
    )
    cursor = conn.cursor()
    cursor.execute("SELECT VERSION()")
    version = cursor.fetchone()[0]
    print(f"Connected to MariaDB server version: {version}")
except mariadb.Error as e:
    print(f"Error connecting to database: {e}")
else:
    print('Connection found attempting to close it now')
    if conn:
        conn.cursor().close()
        conn.close()
finally:
    print('Code execution complete')

Error when I use mariadb as host:

Error connecting to database: Unknown MySQL server host 'mariadb' (-3)
Code execution complete

Error when I use localhost as host:

Error connecting to database: Access denied for user 'user'@'localhost' (using password: YES)
Code execution complete
like image 304
YourCodingBuddy Avatar asked Aug 30 '25 16:08

YourCodingBuddy


1 Answers

You can use docker inspect command to know the ip address of docker

docker inspect containerid

Change the host with the ip address of docker and you are good to go.

For me I had created the database after creating container using docker exec command

docker exec -it container_name:service_name -u root -p
like image 82
Sarthak Avatar answered Sep 02 '25 07:09

Sarthak