【发布时间】:2019-08-19 09:38:38
【问题描述】:
建立连接时服务名没有解析到mysql的主机。 服务名称是mysqldb,但是当我使用它作为主机连接数据库时,它会产生错误。
已解决:问题在于容器的启动。烧瓶容器没有等待 mysql 容器准备就绪。这就是它提前退出的原因。我通过对失败的烧瓶容器使用重启策略进行了快速修复。
docker-compose.yml 文件:
version: '3.7'
services:
mysqldb:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: myapp
MYSQL_PASSWORD: root
ports:
- "3333:3306"
volumes:
- ./db:/docker-entrypoint-initdb.d/:ro
flask-app:
build: .
ports:
- "5000:5000"
depends_on:
- mysqldb
使用 mysql.connector
mydb = mysql.connector.connect(host="mysqldb", user="root",password="root", database="myapp", port="3306")
这是我遇到的错误
flask-app_1 | Traceback (most recent call last):
flask-app_1 | File "/usr/local/lib/python3.7/site-packages/mysql/connector/network.py", line 509, in open_connection
flask-app_1 | self.sock.connect(sockaddr)
flask-app_1 | ConnectionRefusedError: [Errno 111] Connection refused
flask-app_1 |
flask-app_1 | During handling of the above exception, another exception occurred:
flask-app_1 |
flask-app_1 | Traceback (most recent call last):
flask-app_1 | File "app.py", line 10, in <module>
flask-app_1 | mydb = mysql.connector.connect(host="mysqldb", user="root",password="root", database="myapp", port="3306")
flask-app_1 | File "/usr/local/lib/python3.7/site-packages/mysql/connector/__init__.py", line 179, in connect
flask-app_1 | return MySQLConnection(*args, **kwargs)
flask-app_1 | File "/usr/local/lib/python3.7/site-packages/mysql/connector/connection.py", line 95, in __init__
flask-app_1 | self.connect(**kwargs)
flask-app_1 | File "/usr/local/lib/python3.7/site-packages/mysql/connector/abstracts.py", line 716, in connect
flask-app_1 | self._open_connection()
flask-app_1 | File "/usr/local/lib/python3.7/site-packages/mysql/connector/connection.py", line 206, in _open_connection
flask-app_1 | self._socket.open_connection()
flask-app_1 | File "/usr/local/lib/python3.7/site-packages/mysql/connector/network.py", line 512, in open_connection
flask-app_1 | errno=2003, values=(self.get_address(), _strioerror(err)))
flask-app_1 | mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'mysqldb:3306' (111 Connection refused)
flaskapp_flask-app_1 exited with code 1
这里是 docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------
flaskapp_flask-app_1 python3 app.py Up 0.0.0.0:5000->5000/tcp
flaskapp_mysqldb_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3333->3306/tcp, 33060/tcp
docker 网络 ls
NETWORK ID NAME DRIVER SCOPE
509b1e597bc4 bridge bridge local
b841295e0dc6 flaskapp_default bridge local
2cd96006df91 host host local
260025d73006 none null local
【问题讨论】:
-
您需要设置
networks或links才能调用容器服务名称 -
您不应该使用端口
3333连接到您的数据库吗? -
docker-compose 不会将两个容器放在同一个网络中,即桥接吗?
-
3333端口用于从localhost访问数据库。
-
你能从本地访问你的数据库吗?
标签: mysql docker flask docker-compose