如何在启动时将我的数据库转储导入 mariadb?

How to import my db dump into mariadb on start?

我有一个这样的 docker-compose.yml 文件

version: '2'

services:

  wordpress:
    image: wordpress
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_NAME: my_wp
      WORDPRESS_DB_USER: my_user
      WORDPRESS_DB_PASSWORD: my_pass
    volumes:
      - ./src:/var/www/html

  mysql:
    image: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: my_pass
    volumes:
      - ./db:/etc/mysql

我可以使用命令 docker-compose up 运行 我的容器,它工作正常,但显示默认的 wordpress 站点,其中包含要设置的空数据库。我想要的是,我有一个数据库转储文件 my_db.sql,我想在初始化时将其加载到 mariadb 中。我怎样才能做到这一点?我需要将我的 my_db.sql 文件放在哪里以供 mariadb 容器选择?

将包含 sql 文件的文件夹安装到数据库定义的 volumes 部分中容器上的 /docker-entrypoint-initdb.d。任何 .sql(和 .sql.gz)文件将自动 运行 in.

有关详细信息,请参阅 docsInitializing a fresh instance 部分。

您有 3 个选项:

  1. 将您的 .sql 文件装载到 /docker-entrypoint-initdb.d/

    version: '2'
    
    services:
    
      wordpress:
        image: wordpress
        ports:
          - 8080:80
        environment:
          WORDPRESS_DB_NAME: my_wp
          WORDPRESS_DB_USER: my_user
          WORDPRESS_DB_PASSWORD: my_pass
        volumes:
          - ./src:/var/www/html
    
      mysql:
       image: mariadb
        environment:
          MYSQL_ROOT_PASSWORD: my_pass
        volumes:
          - ./db:/etc/mysql
          - ./my_db.sql:/docker-entrypoint-initdb.d/my_db.sql
    
  2. 在您的 docker-compose 文件中使用构建指令并指向具有以下内容的 dockerfile

    FROM mysql
    COPY my_db.sql /docker-entrypoint-initdb.d
    
  3. 创建一个虚拟容器,挂载 /my/own/datadir:/var/lib/mysql,然后使用 docker exec 手动恢复数据库,然后您可以在需要该数据库时使用主机目录容器.