在我的docker-compose.yml中,将init.sql放入volumen。
version: '3'
services:
mysqldb:
image: mysql:5.7.22
container_name: mysql
restart: always
ports:
- "3306:3306"
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/1-init.sql
我知道我应该通过Dockerfile文件运行此脚本。我该如何实现?
答案 0 :(得分:2)
在第一次初始化数据库时,official Docker mysql image将运行/docker-entrypoint-initdb.d
中存在的所有内容(请参见该页面上的“初始化新实例”)。由于您是使用卷将其注入到容器中的,因此如果数据库尚不存在,则脚本将自动运行。
该页面还建议创建一个自定义Docker映像。 Dockerfile会很短
FROM mysql:5.7.22
COPY init.sql /docker/entrypoint-initdb.d/1-init.sql
,然后在构建修改后的图像后,无需在本地复制脚本即可在第一次启动时运行该脚本。
答案 1 :(得分:1)
如果您想在每次运行容器时都运行一个初始化脚本,则可以如下编写:
services:
mysqldb:
image: mysql:5.7.22
container_name: mysql
restart: always
command: --init-file /docker-entrypoint-initdb.d/1-init.sql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=homestead
- MYSQL_USER=root
- MYSQL_PASSWORD=secret
volumes:
- dbdata:/var/lib/mysql`
`