gpt4 book ai didi

python - Dockerized Django 无法连接到 MySQL

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:12 25 4
gpt4 key购买 nike

使用本教程 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 = {
'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 工作台并将本地实例的连接更改为 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.1localhost,从 django 容器的角度来看,它们将引用自身而不是 mysql 容器.

一般来说,对于容器之间的通信,最好的“docker 方式”是让容器共享一个公共(public)的 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。

关于python - Dockerized Django 无法连接到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com