Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从docker容器连接到远程MySQL数据库_Mysql_Docker_Odbc - Fatal编程技术网

从docker容器连接到远程MySQL数据库

从docker容器连接到远程MySQL数据库,mysql,docker,odbc,Mysql,Docker,Odbc,我正在将Django 1.5.x应用程序容器化,该应用程序通过ODBC连接到单独服务器上的MySQL DB: [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连接到远程数

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

[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连接到远程数据库:

 ssh -L 3307:127.0.0.1:3306 MYID@REMOTE_DB_SERVER
我已经使用Centos 6.x为应用程序设置了Docker容器,但无法使MySQL连接正常工作。容器已安装MySQL,并且mysqld正在运行

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

version: "2"
services:
  web:
    build: .
    image: MY_IMAGE
    container_name: MY_CONTAINER
    network_mode: "host"
    ports:
      - "3307:3306"
    command: /bin/bash
在容器运行的情况下,我可以执行以下命令(在容器外部)来显示远程数据库上的数据库:

docker exec MY_CONTAINER echo "show databases" | mysql -u DB_USER -pDB_USER_PWD -h 127.0.0.1 --port=3307
但从容器内部,相同的命令失败:

    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主机地址而不是“127.0.0.1”从容器中进行查询来解决此问题:

echo“show databases”| mysql-u DB_USER-pDB_USER_PWD-h10.0.2.2--port=3306

由于Docker主机ip可能会有所不同,因此本文介绍了获取正确地址的步骤:


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

请阅读以下答案:


您可能可以通过
SSH-L 172.17.0.1:3307:127.0.0.1:3306…
(未测试)使SSH隧道监听docker0接口(172.17.0.1)或所有接口(0.0.0.0,注意风险)。另一种可能是从容器内建立SSH隧道。使用套接字连接到mysql并运行带有
-v/var/run/mysqld:/var/run/mysqld
表示“Docker是一个虚拟机”的“django”容器怎么样可能会出现误解,因为Docker没有与虚拟机相同的结构。我认为说“Docker像虚拟机一样运行”更合适。