Dockerized Django 无法连接到 MySQL
Dockerized Django can't connect to MySQL
使用本教程 https://semaphoreci.com/community/tutorials/dockerizing-a-python-django-web-application,我正在使用 docker-machine
在 VirtualBox 中对接我的 Django 应用程序。一切都非常顺利,直到我打开浏览器,我的应用程序说 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 = {
'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 workbench 并将我的本地实例的连接更改为 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"
然后,现在我在我的 virtualbox 中,我 运行:
docker run -it -p 8000:8000 <docker image name>
---> 将暴露的端口 8000 转发到我本地机器上的端口 8000
docker run -it -p 3306:3306 mysql/mysql-sever
---> 将暴露的端口 3306 转发到我本地计算机上的端口 3306
问题是您正在尝试连接 127.0.0.1
或 localhost
,从 django 容器的角度来看,它们将引用自身而不是 mysql 容器。
一般来说,为了让容器进行通信,最好的"docker way"是让容器共享一个公共的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。
使用本教程 https://semaphoreci.com/community/tutorials/dockerizing-a-python-django-web-application,我正在使用 docker-machine
在 VirtualBox 中对接我的 Django 应用程序。一切都非常顺利,直到我打开浏览器,我的应用程序说 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 = {
'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 workbench 并将我的本地实例的连接更改为 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"
然后,现在我在我的 virtualbox 中,我 运行:
docker run -it -p 8000:8000 <docker image name>
---> 将暴露的端口 8000 转发到我本地机器上的端口 8000
docker run -it -p 3306:3306 mysql/mysql-sever
---> 将暴露的端口 3306 转发到我本地计算机上的端口 3306
问题是您正在尝试连接 127.0.0.1
或 localhost
,从 django 容器的角度来看,它们将引用自身而不是 mysql 容器。
一般来说,为了让容器进行通信,最好的"docker way"是让容器共享一个公共的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。