Connect to remote MySQL db à partir d'un conteneur docker
Je travaille pour placer un Django 1.5.x application qui se connecte à une base MySQL sur un serveur distinct via ODBC:
[mysql_default]
database = DB_NAME
driver = /usr/lib64/libmyodbc5.so
server = REMOTE_DB_SERVER
user = DB_USER
password = DB_USER_PWD
port = 3306
Je suis en mesure d'exécuter le Django app sur ma machine locale (à l'extérieur de docker) avec une connexion à distance à une base de données via la redirection de port & SSH:
ssh -L 3307:127.0.0.1:3306 MYID@REMOTE_DB_SERVER
J'ai mis en place un conteneur Docker pour l'application à l'aide de Centos 6.x, mais ne peut pas obtenir la connexion MySQL de travail. Le conteneur a MySQL et le serveur mysqld en cours d'exécution.
Mon menu fixe-composer.fichier yml ressemble à ceci:
version: "2"
services:
web:
build: .
image: MY_IMAGE
container_name: MY_CONTAINER
network_mode: "host"
ports:
- "3307:3306"
command: /bin/bash
Avec le conteneur de course, je peux exécuter la commande suivante (à l'extérieur du récipient) pour afficher les bases de données sur la distance DB:
docker exec MY_CONTAINER echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3307
Mais à partir de l'intérieur du conteneur de la même commande échoue:
echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3306
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)
- Vous pouvez probablement le faire, le tunnel SSH pour écouter la docker0 interface (172.17.0.1) ou toutes les interfaces (0.0.0.0, avis le risque) par
ssh -L 172.17.0.1:3307:127.0.0.1:3306 ...
(pas testé). L'autre possibilité est d'établir un tunnel SSH à partir de l'intérieur du conteneur.
Vous devez vous connecter pour publier un commentaire.
J'ai résolu ce problème en utilisant le menu fixe adresse de l'hôte au lieu de '127.0.0.1' pour les requêtes à partir de l'intérieur du conteneur:
echo "afficher les bases de données" | mysql -u DB_USER -pDB_USER_PWD -h 10.0.2.2 --port=3306
Parce que Docker ip de l'hôte peuvent varier, cet article décrit les étapes pour obtenir la bonne adresse:
Comment obtenir l'adresse IP du panneau d'accueil de l'intérieur d'un conteneur docker
Le Panneau fonctionne comme une machine virtuelle. Il dispose d'un local de stockage et un environnement local. Lorsque vous vous connectez à l'adresse 127.0.0.1 à partir du menu fixe, il essaie de se connecter à ce menu fixe (pas sur la machine locale où le Docker a été lancé), parce que le localhost pour le menu fixe est le Docker.
Merci de lire la réponse suivante:
Depuis l'intérieur d'un conteneur Docker, comment puis-je me connecter à localhost de la machine?