运行放置在docker volumen中的SQL脚本

时间:2018-07-08 15:14:35

标签: docker docker-compose dockerfile

在我的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文件运行此脚本。我该如何实现?

2 个答案:

答案 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`

        `