2016-04-01 69 views
4

我努力containerize是通过ODBC连接到MySQL数据库的独立服务器上的Django的1.5.x版本的应用程序:连接到从搬运工容器远程MySQL数据库

​​

我能运行我的本地机器(外泊坞窗)上转发&通过SSH端口到远程数据库的连接Django应用程序:

ssh -L 3307:127.0.0.1:3306 [email protected]_DB_SERVER 

我已经设置了使用的Centos 6.x的应用码头工人,容器,但可以”让MySQL连接正常工作。该容器安装了MySQL并且正在运行mysqld。

我的搬运工,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) 
+0

你或许可以使SSH隧道来听的docker0接口(172.17.0.1)或所有接口上(0.0.0.0,注意风险)通过'ssh -L 172.17.0.1:3307:127.0.0.1:3306 ...'(未测试)。另一种可能是从容器内建立SSH隧道。 –

回答

2

泊坞窗像虚拟机一样工作。它有本地存储和当地环境。当你从Docker连接到127.0.0.1时,它会尝试连接到这个Docker(而不是连接Docker的本地机器),因为Docker的本地主机是Docker。

请阅读以下答案:

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

+0

说“Docker是虚拟机”可能会产生误解,因为Docker的结构与绝对虚拟机不同。 我想说“Docker像虚拟机一样运行”更充分。 –