下面是我的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',
},
}
“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