docker容器中的peewee如何连接已有的容器中的数据库
首先,两个容器必须是在同一网络下,有2个办法。
一个是在同一个docker-compose.yml文件下使用links参数,比如:
version: '3'
services:
redis:
image: redis:3.2.8
ports:
- "6379:6379"
volumes:
- ./docker/docker_redis:/data
restart: always
web:
build: .
ports:
- "3000:3000"
links:
- redis
然而目前docker已经计划移除links,所以不建议使用links了,使用networks代替。那么第二种办法就是:
version: '3'
services:
web:
build: .
command: python run.py
ports:
- "5000:5000"
volumes:
- .:/python_test
networks:
- test_default
networks:
test_default:
external: true
其中test_default是创建数据库容器时所在的网络。查看当前docker的网络有哪些可以用 docker network ls.
检验是否在同一网络下:可以在启动容器后,使用docker exec -it 容器名 /bin/bash 进入容器使用: ping 容器名。能ping通说明两个容器在同一个网络下。
最后使用peewee链接容器中的数据库只用将想要访问的数据库的容器名填到host里面即可:
db = MySQLDatabase("test", host="test_mysql_1", port=3306, user="root", passwd="123456")
其他第一个参数"test"是数据库名。