【发布时间】:2017-04-11 01:44:15
【问题描述】:
当我尝试从运行我的 Django 应用程序的 docker 容器连接到运行 MySQL 的容器时,我收到以下错误:
django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on '172.17.0.2' (111)")
这是我运行 MySQL 容器的方式:
$ docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=testdb -e MYSQL_ROOT_HOST=172.17.0.2 -d mysql/mysql-server:5.7
如果我没有指定MYSQL_ROOT_HOST,当我尝试从容器与 Django 应用程序连接时会收到此错误:
django.db.utils.OperationalError: (1130, "Host '172.17.0.3' is not allowed to connect to this MySQL server")
这是我的 Django 设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdb',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '172.17.0.2',
'PORT': '',
}
}
我已验证 MySQL 容器正在使用 IP 172.17.0.2:
$ docker inspect mysql |grep -i ipaddress
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
【问题讨论】:
-
你的数据库docker容器的名字是mysql吗?
-
是的,名字是mysql。
-
MySql 通常需要几秒钟才能启动,您是想立即连接还是稍等一下?另外,fwiw,看起来您在启动容器时不需要指定
MYSQL_ROOT_HOST。 -
尝试将您的容器名称“mysql”作为 django db 设置中的主机值。这就是我拥有它的方式。
-
我在启动 MySQL 容器后等了一分钟,得到了相同的结果。无论我指定
MYSQL_ROOT_HOST,我都会得到不同的结果,我会更新我的帖子。