我有两个容器“web”和“db”。我有一个 csv 格式的现有数据文件。
问题是我可以使用 docker-compose 使用模式初始化 MySQL 数据库,或者只是使用参数运行,但如何导入现有数据?我有Python脚本来解析和过滤数据,然后将其插入到数据库中,但由于单个图像是MySQL,所以我无法在“db”容器中运行它。
更新1
version: '3'
services:
web:
container_name: web
build: .
restart: always
links:
- db
ports:
- "5000:5000"
db:
image: mysql
container_name: db
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_DATABASE: "test"
MYSQL_USER: "test"
MYSQL_PASSWORD: "test"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
ports:
- "33061:3306"
有一个 Python 脚本用于从 csv 文件读取数据并将其插入数据库,效果很好。现在我想在 MySQL 容器设置完毕后运行该脚本。 (我已经在容器中完成了Python和MySQL的连接)
否则,有人有更好的解决方案来导入现有数据吗?
最佳答案
MySQL docker 镜像能够执行 shell 脚本或 sql 文件,如果这些脚本/sql 文件安装在正在运行的容器的 /docker-entrypoint-initdb.d
下,如 here 中所述。和 here 。因此,我建议您编写一个读取 CSV 文件的 SQL 文件(您应该将其安装到容器中,以便 sql 文件可以读取它),以便将其恢复到 MySQL,可能类似于 this answer或者编写一个 bash 脚本将 csv 导入 mysql 中,无论什么对你有用。
您可以在 mysql 的官方 dockerhub 页面上查看初始化新实例
关于python - Dockerfile 使用 python 和 mysql 创建镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55069956/