Docker 与 mysql 和 django。尽管有任何尝试,与 mysql 的连接仍被拒绝
Docker with mysql and django. Connection to mysql is refused despite any attempts
到目前为止,我已经尝试了所有可以在 Internet 上找到的方法 - 但似乎无济于事。
这是我的 docker-compose.yml 文件:
version: '3.3'
services:
ivs_fraud:
build:
context: .
args:
GIT_SSH_KEY: ${GIT_SSH_KEY}
image: ivs_fraud:latest
container_name: fraud
depends_on:
- ivsdb
links:
- ivsdb
networks:
- database_network
networks:
database_network:
driver: bridge
而且我有一个 link / 对 ivsdb 服务的依赖,它在另一个 docker-compose-dev.yml 文件中定义:
version: '3.3'
services:
ivsdb:
image: mysql
container_name: ivsdb
networks:
- database_network
ports:
- ${DEFAULT_DB_PORT}:3306
restart: always
environment:
MYSQL_DATABASE: ${DEFAULT_DB_NAME}
MYSQL_USER: ${DEFAULT_DB_USER}
MYSQL_PASSWORD: ${DEFAULT_DB_PASS}
MYSQL_ROOT_PASSWORD: ${DEFAULT_DB_ROOT_PASS}
这是我的 .env 文件(Django 读取这个 .env 文件并根据它创建连接):
DEFAULT_DB_NAME=ivsdb
DEFAULT_DB_HOST=ivsdb
DEFAULT_DB_PORT=10001
DEFAULT_DB_USER=root
DEFAULT_DB_PASS=root
DEFAULT_DB_ROOT_PASS=root
我不断得到:
(2003, 'Can\'t connect to MySQL server on \'ivsdb\' (111 "Connection
refused")')
我试过几次修改都没有成功:
- 将所有内容移动到一个 docker-compose 文件
- 完全删除 "networks" 条目
- 将主机更改为
ivsdb / 127.0.0.1 / localhost / 0.0.0.0
有用的东西:
- Djago 服务运行良好
- Mysql 服务运行良好。
我可以使用命令行连接到它:
mysql -uroot -proot -P10001 --protocol=tcp
或
mysql -uroot -proot -P10001 -h127.0.0.1 (IP adress enforces tcp protocol)
看起来 Django 很难连接到 mysql 容器。但是根据 "Connection refused" 判断 - django 可以到达 mysql 容器。
我错过了什么?
DEFAULT_DB_PORT=10001
实际上应该是MySQL的默认端口(3306),而不是主机映射端口(10001)
很好地解释了区别here
到目前为止,我已经尝试了所有可以在 Internet 上找到的方法 - 但似乎无济于事。
这是我的 docker-compose.yml 文件:
version: '3.3'
services:
ivs_fraud:
build:
context: .
args:
GIT_SSH_KEY: ${GIT_SSH_KEY}
image: ivs_fraud:latest
container_name: fraud
depends_on:
- ivsdb
links:
- ivsdb
networks:
- database_network
networks:
database_network:
driver: bridge
而且我有一个 link / 对 ivsdb 服务的依赖,它在另一个 docker-compose-dev.yml 文件中定义:
version: '3.3'
services:
ivsdb:
image: mysql
container_name: ivsdb
networks:
- database_network
ports:
- ${DEFAULT_DB_PORT}:3306
restart: always
environment:
MYSQL_DATABASE: ${DEFAULT_DB_NAME}
MYSQL_USER: ${DEFAULT_DB_USER}
MYSQL_PASSWORD: ${DEFAULT_DB_PASS}
MYSQL_ROOT_PASSWORD: ${DEFAULT_DB_ROOT_PASS}
这是我的 .env 文件(Django 读取这个 .env 文件并根据它创建连接):
DEFAULT_DB_NAME=ivsdb
DEFAULT_DB_HOST=ivsdb
DEFAULT_DB_PORT=10001
DEFAULT_DB_USER=root
DEFAULT_DB_PASS=root
DEFAULT_DB_ROOT_PASS=root
我不断得到:
(2003, 'Can\'t connect to MySQL server on \'ivsdb\' (111 "Connection refused")')
我试过几次修改都没有成功:
- 将所有内容移动到一个 docker-compose 文件
- 完全删除 "networks" 条目
- 将主机更改为
ivsdb / 127.0.0.1 / localhost / 0.0.0.0
有用的东西:
- Djago 服务运行良好
- Mysql 服务运行良好。
我可以使用命令行连接到它:
mysql -uroot -proot -P10001 --protocol=tcp
或
mysql -uroot -proot -P10001 -h127.0.0.1 (IP adress enforces tcp protocol)
看起来 Django 很难连接到 mysql 容器。但是根据 "Connection refused" 判断 - django 可以到达 mysql 容器。
我错过了什么?
DEFAULT_DB_PORT=10001
实际上应该是MySQL的默认端口(3306),而不是主机映射端口(10001)
很好地解释了区别here