当我试图从运行我的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",发布于 2016-11-28 02:09:28
我必须在Django容器上授予根用户访问DB的权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.17.0.3' IDENTIFIED BY 'password' WITH GRANT OPTION;
SET PASSWORD FOR root@'172.17.0.3' = PASSWORD('root');
FLUSH PRIVILEGES;其中172.17.0.3是带有应用程序的容器的IP。不需要MYSQL_ROOT_HOST。
发布于 2021-04-08 15:08:32
docker run --rm -d -p 9999:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_ROOT_HOST='%' mysql/mysql-server:5.7
重要的部分是MYSQL_ROOT_HOST='%'
发布于 2016-11-27 08:27:04
这种行为在这里有完整的文档:(host),并按预期工作。我会引用它:
默认情况下,MySQL创建'root'@'localhost‘命令。此帐户只能从容器内部连接,需要使用MySQL命令行客户端连接到MySQL下的docker命令。若要允许来自其他主机的连接,请设置此环境变量。例如,值"172.17.0.1“是默认的Docker网关IP,它将允许来自Docker主机的连接。
您可以看到实际的.sh脚本,它从env变量:https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/docker-entrypoint.sh#L63-L68中设置了允许的主机。
https://stackoverflow.com/questions/40825617
复制相似问题