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

时间:2017-05-26 03:29:53

标签: python mysql docker dockerfile

我正在使用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时失败。我该如何做到这一点?提前致谢。

1 个答案:

答案 0 :(得分:1)

According to the docs,MySQL入口点将自动执行.sh.gz.sql/docker-entrypoint-initdb.d个脚本的所有文件。因此,创建一个脚本来为您执行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>监视正在运行的容器的执行情况,以确保脚本正在运行。