要在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版本兼容。