Docker Compose mysql import .sql

2019-03-25 11:04发布

I'm having trouble importing an .sql dump file with docker-compose. I've followed the docs, which apparently will load the .sql file from docker-entrypoint-initdb.d. However, when I run docker-compose up, the sql file is not copied over to the container.

I've tried stopping the containers with -vf flag, but that didn't work either. Am I doing something wrong in my .yml script?

I have dump.sql in the directory database/db-dump/ in the root where my compose file is.

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

4条回答
SAY GOODBYE
2楼-- · 2019-03-25 11:42

This worked for me,

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

mysql-dump must be a directory. All the .sql's in the directory will be imported.

查看更多
叼着烟拽天下
3楼-- · 2019-03-25 11:44

This appears on the documentation page of Docker MySQL image: https://hub.docker.com/_/mysql/

Initializing a fresh instance

When a container is started for the first time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions .sh, .sql and .sql.gz that are found in /docker-entrypoint-initdb.d. Files will be executed in alphabetical order. You can easily populate your mysql services by mounting a SQL dump into that directory and provide custom images with contributed data. SQL files will be imported by default to the database specified by the MYSQL_DATABASE variable.

查看更多
欢心
4楼-- · 2019-03-25 11:52

After many attempts with the volumes setting i found a workaround

I created another image based on mysql with the following in the Dockerfile

FROM mysql:5.6

ADD dump.sql /docker-entrypoint-initdb.d

Then removed the volumes from compose and ran the new image

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

This way the dump is always copied over and run on startup

查看更多
forever°为你锁心
5楼-- · 2019-03-25 11:56

Mysql database dump schema.sql is resides in the /mysql-dump/schema.sql diretory and it creates tables during the initialization process.

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}
查看更多
登录 后发表回答