提问者:小点点

MySQL.connector.errors.DatabaseError:2005(HY000):未知的MySQL server主机“db”(%2)


  • 我已将django web应用程序对接。
  • 每当我运行“docker-compose up”时,一切都很正常,并且它在本地打开。
  • 但是当我运行“python manage.py runserver”时,它会弹出错误MySQL.connector.errors.databaseerror:2005(HY000):Unknown MySQL server host'db'(2)
  • 这与我将其部署到Azure时显示的错误相同
  • 当docker-compose up在本地正常运行并且web应用程序工作良好时

下面是我的docker-compose.yml文件

services:
db:
  image: mysql
  ports:
    - '3306:3306'
  environment:
     MYSQL_DATABASE: 'app'
     MYSQL_USER: 'root'
     MYSQL_PASSWORD: 'aspilos'
     MYSQL_ROOT_PASSWORD: 'aspilos'
web:
  build: .
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/aspilos
  ports:
    - "8000:8000"
  depends_on:
    - db

这是我的utils.py文件

import mysql.connector
mydb = mysql.connector.connect(
  host="db",
  user="root",
  passwd="aspilos",
  database="aspilos_log",
  auth_plugin="mysql_native_password"
) 
 mycursor = mydb.cursor()
 mycursor.execute("SELECT CONCAT('+', PHONE_NUMBER) FROM category2")
 results = mycursor.fetchall()
 for i in zip(*results):
 number = list(i)
 number1 = '+2348076548894'
 print (number)

这是我的settings.py文件

DATABASES = {
 'default': {
   'ENGINE': 'django.db.backends.mysql',
   'NAME': 'app',
   'USER': 'root',
   'PASSWORD': 'aspilos',
   'HOST': 'db',
   'PORT': '3306',
  },
}

共1个答案

匿名用户

“docker-compose up”一切正常,它在本地打开,但是当我运行“python manage.py runserver”时,它弹出一个错误MySQL.connector.errors.databaseerror:2005(HY000):Unknown MySQL server host'db'(2)

数据库主机db只能在docker-compose网络中工作。 您可以使用docker-compose内部的服务名称连接到其他服务,但在docker-network外部,它将变得无效。

docker-compose中可能出现的一个常见错误是当数据库尚未准备好但应用程序试图连接时,针对该错误的快速而肮脏的修复可以是

 webapp:
   build: .
   image: webapp
   command: sh -c "sleep 30s ; python /app/manage.py"

但是您应该实现重试逻辑。

要处理上述错误,您需要一个主机或系统可以重新执行的DNS

mydb = mysql.connector.connect(
  host="REACHABLE_IP",
....
) 

您可以通过数据库连接来验证可达IP,它可以

MySQL -h REACHABLE_IP -u db_user -pPass