我正在使用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
时失败。我该如何做到这一点?提前致谢。
答案 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>
监视正在运行的容器的执行情况,以确保脚本正在运行。