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

标签 mysql docker odbc

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

[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

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

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 像虚拟机一样工作。它具有本地存储和本地环境。当您从 Docker 连接到 127.0.0.1 时,它会尝试连接到此 Docker(而不是运行 Docker 的本地计算机),因为 Docker 的 localhost 是 Docker。

请阅读以下答案:

From inside of a Docker container, how do I connect to the localhost of the machine?

关于mysql - 从 docker 容器连接到远程 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367100/

相关文章:

javascript - 使用 JS 和 PHP 将 <div> 保存到 MySQL - 可能吗?

mysql - 书架js : How to fetch all entries based on information of another table

python - 命令 '/bin/sh -c pip install -r requirements.txt' 返回非零代码 : 1

docker - 无法在 docker 中连接本地主机

linux - 安装适用于 Linux 的 QODBC 驱动程序

php - MySQL UNION 和 PHP,不是 friend 吗?

mysql if 条件

git - Github Action |基于分支名称的条件

mysql - 从 VBA 连接、更新和关闭与 MySQL 的连接

MySQL ODBC 驱动安装错误