Dockerized Django无法连接到MySQL

时间:2017-12-30 17:16:49

标签: python mysql django docker docker-machine

使用本教程https://semaphoreci.com/community/tutorials/dockerizing-a-python-django-web-application,我使用docker-machine将我的Django应用程序停靠在VirtualBox中。在我访问我的浏览器并且我的应用程序说它存在MySQL问题之前,一切都很顺利。

然后我找到了这个文档,用于对我所遵循的mysql https://github.com/mysql/mysql-docker实例进行docker化,在我创建的同一个开发VirtualBox中创建图像。我最初得到的错误是

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

我的Django DATABASES看起来像这样

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'db_name',
        'USER': 'root',
        'HOST': 'localhost',
        'PORT': ''
    }
}

然后我将主机更改为127.0.0.1,甚至尝试将端口指定为3306,我收到了一个新错误

(2003, "Can't connect to MySQL server on '127.0.0.1' (111)")

我也进入了MySQL工作台并将我的Local实例的连接更改为127.0.0.1:3306,但这没有帮助。

我正在运行的命令是

eval "$(docker-image env development)" --->据说做了这些事情:

         export DOCKER_TLS_VERIFY="1"
         export DOCKER_HOST="tcp://123.456.78.910:1112"
         export DOCKER_CERT_PATH="/Users/me/.docker/machine/machines/development"
         export DOCKER_MACHINE_NAME="development"

然后,现在我在我的虚拟机中,我运行:

docker run -it -p 8000:8000 <docker image name> ---&gt;将暴露的端口8000转发到我本地计算机上的端口8000

docker run -it -p 3306:3306 mysql/mysql-sever ---&gt;将暴露的端口3306转发到我本地计算机上的端口3306

1 个答案:

答案 0 :(得分:3)

问题是您正在尝试连接127.0.0.1localhost,从django容器的角度来看它将引用自身而不是mysql容器。

通常,对于要进行通信的容器,最好的“docker方式”是使容器共享一个公共的docker网络。

docker network create mynet
docker run -it --network mynet -p 8000:8000 <docker image name>
docker run -it --network mynet -p 3306:3306 --name mysql mysql/mysql-sever

现在,应用程序容器可以使用mysql作为主机名并使用3306作为端口连接到mysql。