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)
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.
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
À 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