django - Mysql 没有连接 Docker
问题描述
我正在尝试在实时服务器上连接 mysql docker 容器,但它不工作
我的 docker-compose 文件是
db:
image: mysql:5.7
restart: always
env_file:
- ./app/app/.env
volumes:
- ./mysql-data:/var/lib/mysql
ports:
- "3302:3306"
我的环境文件就像
MYSQL_PORT=3306
MYSQL_DATABASE=mydb
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_ROOT_PASSWORD=root
我的Django settings.py 是
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': mydb,
'USER': root,
'PASSWORD': root,
'HOST': db,
'PORT': 3306,
}
}
gitlab CI 上的错误日志是
Creating test database for alias 'default'...
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
self.connect()
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 227, in get_new_connection
return Database.connect(**conn_params)
File "/usr/local/lib/python3.6/site-packages/MySQLdb/__init__.py", line 130, in Connect
return Connection(*args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/MySQLdb/connections.py", line 185, in __init__
super().__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2002, "Can't connect to MySQL server on 'db' (115)")
解决方案
在您的 docker-compose 文件中,您将端口 3306 映射到 3302。
这意味着您的数据库正在侦听 3306(在环境文件中配置),但是从容器外部,此端口被重定向到端口 3302。
您的 Django 应该在端口3302上连接到您的数据库,示例“setting.py”如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': mydb,
'USER': root,
'PASSWORD': root,
'HOST': db,
'PORT': 3302,
}
}
推荐阅读
- python - 在 TF 中构建 VGG 人脸模型:遇到形状不匹配和不支持的形状错误
- python-3.x - 如何在不使用 Tkinter 中的 Entry 小部件的情况下制作一个按钮,当按下它时将产品名称显示到 Text 小部件
- java - Spigot InventoryClickEvent 仅在第二次点击时找到库存中的项目
- python - Scrapy:无法爬取应用商店评论页面
- r - 如何在ggplot中为火山图添加颜色?
- django - 为重复实例 Django 引发什么异常
- javascript - 无法读取未定义的属性“通道”
- python - 我如何找出字典中添加的内容?
- node.js - 如何在 Raspbian/Debian 上安装工作的最新节点(stable/12.x)?
- javascript - 完成表单和签名后保存 Flask Web 应用程序的 PDF 输出