从Docker容器连接到远程MySQL数据库 [英] Connect to remote MySQL db from docker container

查看:235
本文介绍了从Docker容器连接到远程MySQL数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在努力容器化Django 1.5.x应用程序,该应用程序通过ODBC连接到单独服务器上的MySQL DB:

I'm working to containerize a Django 1.5.x application that connects to a MySQL DB on a separate server 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

我可以在本地计算机(docker外部)上运行Django应用,并通过端口转发和连接到远程数据库; SSH:

I'm able to run the Django app on my local machine (outside docker) with a connection to the remote DB via port forwarding & SSH:

 ssh -L 3307:127.0.0.1:3306 MYID@REMOTE_DB_SERVER

我已经使用Centos 6.x为该应用程序设置了Docker容器,但是无法使MySQL连接正常工作.容器已安装MySQL,并且mysqld正在运行.

I've set up a Docker container for the app using Centos 6.x, but can't get the MySQL connection working. The container has MySQL installed and the mysqld running.

我的docker-compose.yml文件如下:

My docker-compose.yml file looks like this:

version: "2"
services:
  web:
    build: .
    image: MY_IMAGE
    container_name: MY_CONTAINER
    network_mode: "host"
    ports:
      - "3307:3306"
    command: /bin/bash

在容器运行时,我可以执行以下命令(在容器外部)以显示远程数据库上的数据库:

With the container running, I can execute the following command (outside the container) to show databases on the remote DB:

docker exec MY_CONTAINER echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3307

但是从容器内部,相同的命令失败:

But from inside the container the same command fails:

    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)

推荐答案

Docker就像虚拟机一样工作.它具有本地存储和本地环境.当您从Docker连接到127.0.0.1时,它会尝试连接到该Docker(而不是运行Docker的本地计算机),因为Docker的本地主机是Docker.

The Docker works like a virtual machine. It has a local storage and a local environment. When you connect to 127.0.0.1 from the Docker it tries to connect to this Docker (not to local machine where the Docker was runned) because the localhost for the Docker is the Docker.

请阅读以下答案:

如何从Docker容器内部连接到计算机的本地主机?

这篇关于从Docker容器连接到远程MySQL数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆