docker-compose mysql 执行初始化 SQL 代码

22 min read

要在docker-compose中执行初始化SQL代码,您可以在mysql服务的environment部分添加一个环境变量MYSQL_INITDB_SQL,并将其设置为您要执行的SQL代码所在的文件。

下面是一个示例docker-compose.yml文件的示例:

version: '3'

services:
  mysql:
    image: mysql:latest
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=mysecretpassword
      - MYSQL_DATABASE=mydatabase
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
      - MYSQL_INITDB_SQL=/docker-entrypoint-initdb.d/init.sql
    volumes:
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

  app:
    build: .
    restart: always
    depends_on:
      - mysql

在上面的示例中,我们将MYSQL_INITDB_SQL环境变量设置为/docker-entrypoint-initdb.d/init.sql,这是我们要执行的SQL代码所在的文件。我们还将./init.sql挂载到/docker-entrypoint-initdb.d/init.sql目录中,以便MySQL容器可以访问它。

然后,在./init.sql文件中,您可以编写要在MySQL容器启动时执行的初始化SQL代码。例如,您可以在init.sql文件中编写以下代码:

CREATE TABLE IF NOT EXISTS users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL
);

INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

当您使用docker-compose up命令启动应用程序时,它将创建一个名为mydatabase的数据库,并在该数据库中创建一个名为users的表。它还将插入一条记录到该表中。

请注意,您需要确保SQL代码符合MySQL的语法要求,并且与您使用的MySQL版本兼容。