Dockerfile - 运行 init sql 文件来设置表

roh*_*han 2 mysql docker dockerfile docker-compose

我能够运行 SQL 文件,如下所示:

  1. 将 Dockerfile 设置为:

    来自 mysql

    ENV MYSQL_DATABASE stock_app

    复制 ./sql-scripts/ /docker-entrypoint-initdb.d/

  2. 建立形象:

    docker build -t 数据库。

  3. 运行以下命令:

    docker run -d -p 3306:3306 --name db -e MYSQL_ROOT_PASSWORD=密码 db

这是有效的,并且能够验证脚本内的 SQL 命令是否已执行以及表是否已创建。

当我执行以下命令来显示所有图像时,我应该进行哪些更改才能完成所有三个步骤?

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

是否可以选择将运行的 SQL 文件放入 Dockerfile 中,而不是手动构建 db 映像并运行命令来执行 SQL 文件?也就是将上面提到的步骤3包含在Dockerfile中。

Car*_*los 5

您可能甚至不需要 Dockerfile,除非您正在执行上面未列出的其他操作。您应该能够使用简单的 docker-compose 来完成您想要的操作,如下所示:

version: '3.3'
services:
  database:
    image: mysql
    volumes:
       - "./sql-scripts:/docker-entrypoint-initdb.d"
    environment:
      MYSQL_DATABASE: stock_app
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
Run Code Online (Sandbox Code Playgroud)

每当您更新 sql 脚本时,您都需要使用docker-compose up -d --force-recreate. 根据设计,mysql 映像将运行“/docker-entrypoint-initdb.d”文件夹中找到的任何 sql 文件,因此您不必在每次重新创建容器时手动运行这些文件。