在docker容器中启动mysql之后插入数据

我正在使用docker在容器中启动mysql服务。 容器启动后,我想通过python脚本自动插入一些数据到数据库。 这是我的Dockerfile

 FROM mysql:5.7 EXPOSE 3306 ENV MYSQL_ROOT_PASSWORD 123456 WORKDIR /app ADD . /app RUN apt-get update \ && apt-get install -y python3 \ && apt-get install -y python3-pip RUN pip3 install --user -r requirements.txt RUN python3 init.py 

最后一行运行脚本来添加一些数据到数据库,但是这次mysql服务还没有启动,所以在运行docker build时候会失败。 我如何做到这一点? 提前致谢。

根据文档 ,MySQL入口点将自动执行/docker-entrypoint-initdb.dfind的任何带有.sh.gz.sql脚本的/docker-entrypoint-initdb.d 。 所以,创build一个脚本来执行你的Python脚本。 如果你调用这个文件01-my-script.sh ,你的Dockerfile将如下所示:

 FROM mysql:5.7 EXPOSE 3306 ENV MYSQL_ROOT_PASSWORD 123456 WORKDIR /app RUN apt-get update && apt-get install -y \ python3 \ python3-pip # Copy requirements in first, and run them (so cache won't be invalidated) COPY ./requirements.txt ./requirements.txt RUN pip3 install --user -r requirements.txt # Copy SQL Fixture COPY ./01-my-script.sh /docker-entrypoint-initdb.d/01-my-script.sh RUN chmod +x /docker-entrypoint-initdb.d/01-my-script.sh # Copy the rest of your project COPY . . 

而你的脚本将只包含:

 #!/bin/sh python3 /app/init.py 

现在,当你调出你的容器时,你的脚本就会执行。 使用docker logs -f <container_name>监视正在运行的容器的执行情况,确保脚本正在运行。