我正在尝试将我的应用程序连接到我已建立并在docker-compose文件中运行的mysql数据库。我正在使用flask并尝试使用DBUtils连接 我不断收到标题中描述的错误消息:
(pymysql.err.OperationalError:(2003,“无法连接到'db'上的MySQL服务器([Errno 8]节点名或提供的服务名,或者未知)”)
我已经尝试过使用我的docker实例的IPAddresses以及在StackOverflow上讨论的类似问题中的其他几种解决方案:
Docker-Compose can't connect to MySQL
Connecting to MySQL from Flask Application using docker-compose。
但是,提供的解决方案似乎不适用于我。
我的docker-compose文件如下所示:
version: '3.3'
services:
db:
image: mysql:8.0
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'myPassword'
MYSQL_DATABASE: 'databaseName'
volumes:
- .:/dockerFiles
ports:
- "3306:3306"
expose:
- "3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
restart: always
ports:
- "8080:80"
volumes:
- /sessions
我的连接字符串如下:
def connect_db():
# Connects to the database and takes care of the connection
return PersistentDB(
creator=pymysql, host='db',
user='root', password='myPassword', database='databaseName', port=3306,
autocommit=True, charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
答案 0 :(得分:0)
错误[Errno 8] nodename nor servname provided, or not known
表示找不到数据库服务器。因此,host='db'
仅在您的Python代码位于数据库服务db
的同一网络中的docker内部时才有效。尝试在docker-compose中为Python代码添加服务:
version: '3.3'
services:
db:
image: mysql:8.0
container_name: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'myPassword'
MYSQL_DATABASE: 'databaseName'
volumes:
- .:/dockerFiles
ports:
- "3306:3306"
expose:
- "3306"
web:
build: . # where is your dockerfile
command: sh -c 'python app.py' # this should be the command to start your application
ports:
- "8082:8082"
volumes:
- .:/code # it depends on the WORKDIR of your dockerfile
links:
- db