我目前正在开始使用docker-compse
进行实验。我创建了一个最小的Flask + MySQL web服务,在没有Docker的情况下工作得很好。现在我想看看如何使用Docker轻松部署。
我的docker-compose.yml
看起来像这样:
version: '3'
services:
web:
build: .
command: app.py
ports:
- "8082:8082"
volumes:
- .:/code
links:
- db
hostname: myappserver
environment:
- MYSQL_ROOT_PASSWORD=p@ssw0rd123
- MYSQL_DATABASE=flask_db
- MYSQL_HOST=db
- MYSQL_PORT=3306
db:
image: mysql
ports:
- "3307:3306"
environment:
- MYSQL_ROOT_PASSWORD=p@ssw0rd123
- MYSQL_DATABASE=flask_db
- MYSQL_HOST=mysqlserver
当我运行sudo docker-compose up --build
时,我得到了
web_1 | sqlalchemy.exc.ProgrammingError: (mysql.connector.errors.ProgrammingError) 1146 (42S02): Table 'performance_schema.session_variables' doesn't exist [SQL: "SHOW VARIABLES LIKE 'sql_mode'"]
db_1 | 2017-07-21T22:27:26.553761Z 3 [Note] Aborted connection 3 to db: 'flask_db' user: 'root' host: '172.18.0.3' (Got an error reading communication packets)
问题是什么,我该如何解决?
(完整的项目在这里:https://github.com/MartinThoma/flask_mysql_dockerized - 它真的很小)
mysql_upgrade -u root -p --force
和/etc/init.d/mysql start
进行修复。但是使用docker compose的目的是让启动Web服务变得非常简单。一个命令。如果我必须告诉用户登录容器,运行这些命令,重新启动另一个容器..然后我可以简单地让他手动将它安装在主系统/运行docker容器上。所以这就是我所做的解决方法,我希望可以手动完成这项工作:
Start the containers:
# docker-comopse up
Find the container ID of the mysql image:
# docker container ls
Enter the container
# sudo docker exec -it 4f7d3f0763ad bash
Upgrade
# mysql_upgrade -u root -p --force
Exit the container, then restart
# docker-compose up
Initialize the database:
# cd /docker-entrypoint-initdb.d/
# mysql -h localhost -u root -p
mysql> source flask_db.sql;
答案 0 :(得分:1)
您需要将数据库添加到您的mysql服务中:
volumes:
- ./flask_db.sql:/docker-entrypoint-initdb.d/flask_db.sql
提示:建议使用较小的图像,以便您的图像只需要基本组件,并且不需要额外的非必要内容。