mysql.connector.errors.DatabaseError:2005(HY000):未知的mysql服务器主机';db';(2) 我已将django web应用程序对接 每当我运行“docker compose up”时,一切都很好,它就会打开 局部 但是当我运行“python manage.py runserver”时,它会弹出一个错误 mysql.connector.errors.DatabaseError:2005(HY000):未知的mysql服务器主机“db”(2) 这与我将其部署到azure时显示的错误相同 docker compose在本地正常运行,web应用程序运行良好
这是我的docker-compose.yml文件mysql.connector.errors.DatabaseError:2005(HY000):未知的mysql服务器主机';db';(2) 我已将django web应用程序对接 每当我运行“docker compose up”时,一切都很好,它就会打开 局部 但是当我运行“python manage.py runserver”时,它会弹出一个错误 mysql.connector.errors.DatabaseError:2005(HY000):未知的mysql服务器主机“db”(2) 这与我将其部署到azure时显示的错误相同 docker compose在本地正常运行,web应用程序运行良好,python,mysql,django,azure,docker,Python,Mysql,Django,Azure,Docker,这是我的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 ma
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',
},
}
“docker compose up”一切正常,它在本地打开,但当我运行“python manage.py runserver”
时,它会弹出一个错误
mysql.connector.errors.DatabaseError:2005(HY000):未知的mysql服务器主机'db'(2)
数据库主机DB
将仅在中工作。您可以在docker compose内部使用服务名称连接到其他服务,但在docker网络外部它将变得无效
docker compose中可能出现的一个常见错误是,当数据库尚未准备好,但应用程序尝试连接时,可能会出现一个快速而肮脏的修复程序
webapp:
build: .
image: webapp
command: sh -c "sleep 30s ; python /app/manage.py"
但是您应该实现重试逻辑
要处理上述错误,您需要主机或系统能够解析的DNS
mydb = mysql.connector.connect(
host="REACHABLE_IP",
....
)
您可以通过DB连接来验证可访问IP,它可以
MySQL -h REACHABLE_IP -u db_user -pPass
检查docker compose输出中数据库的容器名称,并将其用作主机名。它不起作用。数据库的容器名为aspilos_db_1。我现在尝试了,它带来了另一个错误mysql.connector.errors.DatabaseError:2005(HY000):未知的mysql服务器主机'aspilos_db_1'(0),然后尝试在Yaml中显式设置主机名并检查容器中的DNS解析。我该如何做呢?这是您的主机>
'host':'db',
由于主机名是aspilos\u db\u 1
,您必须为aspilos\u db\u 1
更改此db
,这里有一个注意事项,请记住Docker使用foldername\u servicename\u servicenumber来命名它,我如何知道可访问的ip请如何运行脚本?您检查系统IP以使其工作,localhost不工作。我的系统的IP地址是192.168.0.1,但它不工作。当您将其部署到azure时,您是否运行了docker compose up
?您可以验证mysql客户端的db连接吗?数据库正在运行吗<代码>您应该运行docker compose up`?