在 docker 容器中启动 mysql 后插入数据
Posted
技术标签:
【中文标题】在 docker 容器中启动 mysql 后插入数据【英文标题】:Insert data after mysql started in a docker container 【发布时间】:2017-10-26 20:24:38 【问题描述】:我正在使用 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】:According to the docs,MySQL 入口点将自动执行在/docker-entrypoint-initdb.d
中找到的带有.sh
、.gz
或.sql
脚本的任何文件。因此,创建一个脚本来为您执行 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>
监控正在运行的容器的执行情况,以确保您的脚本正在运行。
【讨论】:
以上是关于在 docker 容器中启动 mysql 后插入数据的主要内容,如果未能解决你的问题,请参考以下文章