Docker撰写mysql import .sql

Gaf*_*erG 18 mysql docker docker-compose

我在使用docker-compose导入.sql转储文件时遇到问题.我已经关注了docs,显然它将从docker-entrypoint-initdb.d加载.sql文件.但是,当我运行时docker-compose up,sql文件不会被复制到容器中.

我已经尝试用-vf旗帜停止容器,但这也不起作用.我在.yml脚本中做错了吗?

我在我的撰写文件所在的目录database/db-dump /中有dump.sql.

frontend:
  image: myimage
  ports:
   - "80:80"
  links:
   - mysql
mysql:
  image: mysql
  ports:
   - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: rootpass
    MYSQL_USER: dbuser
    MYSQL_PASSWORD: userpass
    MYSQL_DATABASE: myimage_db
  volumes:
   - ./database/db-dump:/docker-entrypoint-initdb.d
Run Code Online (Sandbox Code Playgroud)

Gaf*_*erG 24

经过多次尝试卷设置后,我找到了一种解决方法

我在Dockerfile中使用以下内容创建了另一个基于mysql的图像

FROM mysql:5.6

ADD dump.sql /docker-entrypoint-initdb.d
Run Code Online (Sandbox Code Playgroud)

然后从撰写中删除卷并运行新图像

frontend:
  image: myimage
  ports:
   - "80:80"
  links:
   - mysql
mysql:
  image: mymysql
  ports:
   - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: rootpass
    MYSQL_USER: dbuser
    MYSQL_PASSWORD: userpass
    MYSQL_DATABASE: myimage_db
Run Code Online (Sandbox Code Playgroud)

这样,转储总是被复制并在启动时运行

  • 你应该看看:https://gist.github.com/spalladino/6d981f7b33f6e0afe6bb (2认同)

Sri*_* Sg 17

这对我有用

version: '3.1'

services:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
      - ./mysql-dump:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: ecommerce

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080
Run Code Online (Sandbox Code Playgroud)

mysql-dump必须是目录。目录中的所有.sql文件都将被导入。

  • 请记住,您的 SQL 语句可能需要 `CREATE DATABASE [name]` 和 `USE [name]` 语句,您可以确认您的 SQL 文件将与 `docker exec -i [container_id] sh -c 'exec mysql -uroot -p 一起使用"[password]"' < /path/to/db/files/dump.sql`,如果它在这里工作,它应该在你的 docker-compose 文件中工作 (2认同)

Mvo*_*hoa 14

这出现在Docker MySQL图像的文档页面上:https://hub.docker.com/_/mysql/

初始化一个新实例

首次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化.此外,它会执行文件(可扩展).sh,.sql并且.sql.gz是在/docker-entrypoint-initdb.d找到.文件将按字母顺序执行.您可以通过将SQL转储装入该目录 并使用提供的数据提供自定义映像来轻松填充您的mysql服务.默认情况下,SQL文件将导入到MYSQL_DATABASE变量指定的数据库中.

  • /docker-entrypoint-initdb.d仅在创建容器时读取.当他运行docker-compose时,OP要求数据库"更新". (2认同)

ufu*_*mer 10

Mysql数据库转储schema.sql文件是驻留在/mysql-dump/schema.sql目录和它在初始化过程中创建表。

docker-compose.yml:

mysql:
    image: mysql:5.7
    command: mysqld --user=root
    volumes:
      - ./mysql-dump:/docker-entrypoint-initdb.d
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
Run Code Online (Sandbox Code Playgroud)