【问题标题】:Insert data after mysql started in a docker container在 docker 容器中启动 mysql 后插入数据
【发布时间】: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 时失败。我该如何做到这一点?提前致谢。

【问题讨论】:

    标签: python mysql docker dockerfile


    【解决方案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> 监控正在运行的容器的执行情况,以确保您的脚本正在运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-23
      • 1970-01-01
      • 2018-11-30
      • 2018-09-29
      • 1970-01-01
      • 2022-01-21
      • 2023-03-30
      • 2020-11-11
      相关资源
      最近更新 更多