在docker容器中启动mysql之后插入数据
我正在使用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
时候会失败。 我如何做到这一点? 提前致谢。
根据文档 ,MySQL入口点将自动执行/docker-entrypoint-initdb.d
find的任何带有.sh
, .gz
或.sql
脚本的/docker-entrypoint-initdb.d
。 所以,创build一个脚本来执行你的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>
监视正在运行的容器的执行情况,确保脚本正在运行。
- 与jre-8的高山Linuxdocker集装箱没有Nashorn引擎
- 找不到Docker工具窗口IntelliJ IDEA 2016.2.4(Ultimate)
- 如何在Mac上debuggingDocker设置的networking(可能是Hyperkit导致的问题)?
- 如何使用nvidia-docker在Docker Swarm中创build服务
- Docker访问Raspberry Pi GPIO引脚
- 在Docker容器中运行Django应用程序时获取502错误的网关?
- 如何在kubernete的pod yaml文件中指定主机端口范围而不是主机端口?
- 如何使用TensorFlow设置Udacity Deep Learning类的学习环境(Windows)
- 使用gradle-docker-plugin将docker服务器IP设置为环境variables