[PYTHON] Es kann keine Verbindung zu MySQL über die Docker-Umgebung (Debian) hergestellt werden.

Zielgruppe dieses Artikels

Problem

Der obige Fehler trat auf, als ich die App in einer Docker-Umgebung startete und versuchte, von innen eine Verbindung zu einem externen MySQL (in diesem Fall Amazon Aurora) herzustellen. Abhängig vom Basis-Docker-Image wird möglicherweise ein Fehler angezeigt oder nicht. ..

Dieses Mal musste ich mit Docker eine Python-Umgebung erstellen, also habe ich sie aus dem offiziellen Image von Python 3.7.4 erstellt. Es geht nicht auf die Details der Anwendung ein, sondern verwendet Pandas für die Verarbeitung. Ich versuche, eine Verbindung mit mysql.connector herzustellen.

Docker (Debian-Basis), bei dem ein Fehler auftritt ↓

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

Kein Fehler Docker (Alpenbasis) ↓

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

Python-Code des Verbindungsteils ↓

main.py


#Auszug
import mysql.connector as my

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

conn = my.connect(**myconfig)

Zweck

Wenn es auf Alpine basiert, braucht es viel Zeit, um C-Serien wie Numpy und Pandas zum Zeitpunkt des Builds zu erstellen. Deshalb wollte ich daraus ein Debian-basiertes Docker-Image machen.

Ursache und Lösung

Für MySQL 5.6 / 5.7 scheint die unterstützte TLS-Version TLSv1.1 zu entsprechen. [2] Changes in MySQL Connector/Python 8.0.18 (2019-10-14, General Availability)

In Debian ist die Standardeinstellung für openssl TLSv1.2, was beim Herstellen einer Verbindung zu einem Fehler geführt hat.

Es gibt zwei Lösungsmuster.

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

#Wechselpunkt
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

Ermittlung

Informationen zu den TLS-Standardeinstellungen von Debian [1] Debian openssl-1.1.1

Informationen zum Python MySQL Connector-Update [2] Changes in MySQL Connector/Python 8.0.18 (2019-10-14, General Availability)

So untersuchen Sie den Fehlerinhalt und ändern den eingestellten Wert [3] SSL routines:ssl_choose_client_version:unsupported protocol

Ich habe nicht verstanden, warum Alpine den Fehler nicht bekommen hat. Ich kann nichts wie die TLS-Standardeinstellungen in etc / ssl / openssl.cnf finden. .. .. Möglicherweise werden Sie aufgefordert, das Protokoll zu studieren. Wenn jedoch keine Standardeinstellung vorhanden ist, wird die TLS-Version ausgewählt und eine Verbindung zu Ihnen hergestellt.

Wenn jemand die Ursache kennt, möchte ich Sie bitten, zu unterrichten.

Recommended Posts

Es kann keine Verbindung zu MySQL über die Docker-Umgebung (Debian) hergestellt werden.
Herstellen einer Verbindung von Python zu MySQL unter CentOS 6.4
Von Kafka bis KSQL - Einfache Umgebungskonstruktion mit Docker
Erstellen Sie eine MySQL + Python-Umgebung mit Docker
Ab Ubuntu 20.04 Einführung in die Umgebungskonstruktion
Erfahren Sie, wie Sie Docker verwenden, indem Sie eine Umgebung für Django + MySQL erstellen
Stellen Sie von Flask aus eine Verbindung zum MySQL-Container von Docker her
Stellen Sie mit Python in Docker eine Verbindung zu MySQL her
Verwendung von Tensorflow unter Docker-Umgebung
Einführung von Docker Engine in Linux von Grund auf neu
Einführung in Docker Erstellen einer Ubuntu-Umgebung in Ubuntu
Erstellen Sie mit Docker eine Umgebung aus NGINX + NGINX Unit + MySQL
Von 0 bis Django Entwicklungsumgebung Konstruktion bis Grundbetrieb
Von der Python-Umgebungskonstruktion zur virtuellen Umgebungskonstruktion mit Anaconda
[AWS] Migrieren Sie Daten von DynamoDB nach Aurora MySQL
Memo zur Migration von Djangos DB von SQLite3 nach MySQL auf Docker auf Raspberry Pi 4B
Summe von 1 bis 10
Stellen Sie eine Verbindung zu MySQL her
Vom Einrichten des Raspberry Pi bis zur Installation der Python-Umgebung
So erstellen Sie eine Django (Python) -Umgebung auf Docker
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Beschleunigen Sie die Verbindung von cx_Oracle zur autonomen Datenbank
Aufbau der Python-Entwicklungsumgebung 2020 [Von der Python-Installation bis zur Einführung in die Poesie]
Beispiel einer Pytest-Umgebung zum Reparieren der Datenbank mit Docker
Verfahren zum Konvertieren einer Python-Datei in eine Exe aus der Ubunts-Umgebungskonstruktion
Fügen wir es der Umgebungsvariablen mit dem Befehl ~ hinzu
Automatische Konvertierung von der MySQL Workbench-MWB-Datei in eine SQL-Datei