I am trying the connect mariadb with python using docker-compose:
docker-compose.yml
version: '2'
services:
mariadb:
image: bitnami/mariadb
ports:
- "3306:3306"
environment:
MARIADB_DATABASE: 'mary_db'
MARIADB_USER: user2
MARIADB_PASSWORD: 'pass1234'
consumer:
build: ./consumer
links:
- mariadb
consumer.py
import mysql.connector as mariadb1
mariadb_connection = mariadb1.connect(host='mariadb',
port=3306,
user='user2',
password='pass1234',
database='mary_db')
cursor = mariadb_connection.cursor(buffered=True)
try:
cursor.execute('DROP TABLE names')
except:
pass
comm = "CREATE TABLE names(id VARCHAR(20), location VARCHAR(100)," \
"PRIMARY KEY (mac,location)) ENGINE=InnoDB"
cursor.execute(comm)
print 'created'
The Dockerfile entrypoint is just calling the consumer.py function like:
ENTRYPOINT python -u consumer.py
The problem is very randomly (more than %90 of trials), python code cannot connect with database and prints this error:
File "consumer.py", line 7, in database='mary_db') File "/usr/local/lib/python2.7/dist-packages/mysql/connector/init.py", line 179, in connect return MySQLConnection(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 95, in init self.connect(**kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/abstracts.py", line 719, in connect self._open_connection() File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 206, in _open_connection self._socket.open_connection() File "/usr/local/lib/python2.7/dist-packages/mysql/connector/network.py", line 475, in open_connection errno=2003, values=(self.get_address(), _strioerror(err))) mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'mariadb:3306' (111 Connection refused)
Any idea what is going on?