【发布时间】:2016-04-01 23:00:27
【问题描述】:
我正在对通过 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)
【问题讨论】:
-
你可以通过
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运行“django”容器