[PYTHON] Impossible de se connecter à MySQL depuis l'environnement Docker (Debian)

Public cible de cet article

problème

L'erreur ci-dessus s'est produite lorsque j'ai lancé l'application dans un environnement Docker et essayé de me connecter à un MySQL externe (Amazon Aurora dans ce cas) de l'intérieur. Selon l'image Docker de base, vous pouvez ou non obtenir une erreur. ..

Cette fois, j'avais besoin de créer un environnement python avec Docker, donc je l'ai créé à partir de l'image officielle de python 3.7.4. Il n'entre pas dans les détails de l'application, mais il utilise des pandas pour le traitement. J'essaye de me connecter en utilisant mysql.connector.

Docker (base Debian) où une erreur se produit ↓

Dockerfile


FROM python:3.7.4-slim

RUN apt-get -y update  && apt-get install -y --no-install-recommends \
   apt-utils \
   python-dev \
   build-essential \
   libpq-dev

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

COPY requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt

Pas d'erreur Docker (Alpine base) ↓

Dockerfile


FROM python:3.7.4-alpine3.10

RUN apk --update-cache add \
 bash \
 gcc \
 g++ \
 gfortran \
 postgresql-dev \
 openblas-dev \
 freetype-dev

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

COPY requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt

Code Python de la partie connexion ↓

main.py


#Extrait
import mysql.connector as my

myconfig = {
    'user': 'user',
    'password': 'your_password',
    'host': 'your_host',
    'database' : 'your_db',
}

conn = my.connect(**myconfig)

Objectif

Avec Alpine base, il faut beaucoup de temps pour construire des séries C telles que numpy et pandas au moment de la construction, donc je voulais en faire une image Docker basée sur Debian.

Cause et solution

Pour MySQL 5.6 / 5.7, la version TLS prise en charge semble être jusqu'à TLSv1.1. [2] Changes in MySQL Connector/Python 8.0.18 (2019-10-14, General Availability)

Dans Debian, le paramètre par défaut pour openssl est TLSv1.2, ce qui a causé une erreur lors de la connexion.

Il existe deux modèles de solutions.

Dockerfile


FROM python:3.7.4-slim

RUN apt-get -y update  && apt-get install -y --no-install-recommends \
   apt-utils \
   python-dev \
   build-essential \
   libpq-dev

#point de changement
RUN apt-get update -yqq \
    && apt-get install -y --no-install-recommends openssl \
    && sed -i 's,^\(MinProtocol[ ]*=\).*,\1'TLSv1.0',g' /etc/ssl/openssl.cnf \
    && rm -rf /var/lib/apt/lists/*

RUN pip install --upgrade pip
RUN pip install --upgrade setuptools

COPY requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt

enquête

À propos des paramètres par défaut TLS de Debian [1] Debian openssl-1.1.1

Informations de mise à jour du connecteur Python MySQL [2] Changes in MySQL Connector/Python 8.0.18 (2019-10-14, General Availability)

Comment rechercher le contenu de l'erreur et modifier la valeur définie [3] SSL routines:ssl_choose_client_version:unsupported protocol

Je n'ai pas compris pourquoi Alpine n'a pas obtenu l'erreur. Je ne trouve rien de tel que les paramètres par défaut de TLS dans etc / ssl / openssl.cnf. .. .. Vous pouvez être invité à étudier le protocole, mais s'il n'y a pas de paramètre par défaut, il sélectionnera la version TLS et se connectera à vous.

Si quelqu'un connaît la cause, je voudrais vous demander d'enseigner.

Recommended Posts

Impossible de se connecter à MySQL depuis l'environnement Docker (Debian)
Connexion de python à MySQL sur CentOS 6.4
De Kafka à KSQL - Construction d'environnement facile avec docker
Construire un environnement Mysql + Python avec docker
De Ubuntu 20.04 introduction à la construction d'environnement
Apprenez à utiliser Docker en créant un environnement pour Django + MySQL
Connectez-vous au conteneur MySQL de Docker depuis Flask
Connectez-vous à MySQL avec Python dans Docker
Comment utiliser Tensorflow dans un environnement Docker
Présentation de Docker Engine à Linux From Scratch
Introduction à docker Création d'un environnement ubuntu dans ubuntu
Construire un environnement de NGINX + NGINX Unit + MySQL avec Docker
De 0 à la construction de l'environnement de développement Django à l'exploitation de base
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda
[AWS] Migrer les données de DynamoDB vers Aurora MySQL
Mémo de la migration de la base de données de Django de SQLite3 vers MySQL sur Docker sur Raspberry Pi 4B
Somme de 1 à 10
Connectez-vous à mysql
De la configuration du Raspberry Pi à l'installation de l'environnement Python
Comment créer un environnement Django (python) sur Docker
[Go + Gin] J'ai essayé de créer un environnement Docker
Accélération lors de la connexion de cx_Oracle à la base de données autonome
Construction de l'environnement de développement Python 2020 [De l'installation de Python à l'introduction à la poésie]
Exemple d'environnement pytest pour réparer la base de données avec Docker
Procédure pour convertir un fichier python en exe à partir de la construction de l'environnement Ubunts
Ajoutons-le à la variable d'environnement à partir de la commande ~
Conversion automatique du fichier MySQL Workbench mwb en fichier sql