在 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 后插入数据的主要内容,如果未能解决你的问题,请参考以下文章

docker mysql容器启动后退出

docker容器不会以Mysql docker镜像启动

docker mysql 容器 数据库文件怎么娴宿主机器上

docker mysql 容器 数据库文件怎么娴宿主机器上

docker 关闭镜像后,容器无法启动---Conflict. The container nam

docker容器启动Mysql执行初始化sql脚本实现