我有两个容器“ web”和“ db”。我有一个csv格式的现有数据文件。
问题是我可以使用docker-compose使用架构初始化MySQL数据库,或者仅使用参数运行,但是如何导入现有数据?我有Python脚本来解析和过滤数据,然后将其插入db,但是由于单个映像是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的连接)
否则,任何人都有更好的解决方案来导入现有数据吗?
答案 0 :(得分:1)
如果here和here中所述,对于运行中的容器,如果将这些脚本/ SQL文件安装在/docker-entrypoint-initdb.d
下,则MySQL docker映像可以执行Shell脚本或sql文件。因此,我建议您编写一个读取CSV文件的SQL文件(您应该将该文件挂载到容器中,以便sql文件可以读取它),以便将其恢复到MySQL,也许类似于this answer或编写bash。将csv导入mysql的脚本,对您有用。
您可以在{@ 3}}的官方dockerhub页面上检查初始化新实例
答案 1 :(得分:0)
从Dockerfile中,您可以调用脚本(Entrypoint)。在此脚本中,您可以调用python脚本。例如:
DockerFile:
FROM php:7.2-apache
RUN apt-get update
COPY ./entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
这将在App容器中运行您的入口点脚本。确保您在应用容器的撰写说明中拥有depends on
属性。