laradock環境でローカルマシンのsqlファイルをMySQLに流し込みたい場合。
こんな感じでコンテナが起動している。
$ docker ps
CONTAINER ID IMAGE COMMAND
83a350a8c22c laradock_mysql "docker-entrypoint.s…"
cd485823dd8c laradock_nginx "/bin/bash /opt/star…"
1bc92dd9085a laradock_php-fpm "docker-php-entrypoi…"
40c24fb2af94 laradock_phpmyadmin "/docker-entrypoint.…"
4f9d280f1124 laradock_workspace "/sbin/my_init"
MySQLのコンテナにマウントパスを設定
初期状態ではMySQLコンテナにはマウントパスが設定されていないのでdocker-compose.ymlで設定する。
${APP_CODE_PATH_CONTAINER}は.envで/var/wwwが設定されているものとする。
docker-compose.yml
### MySQL ################################################
mysql:
build:
context: ./mysql
args:
- MYSQL_VERSION=${MYSQL_VERSION}
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- TZ=${WORKSPACE_TIMEZONE}
volumes:
- ${DATA_PATH_HOST}/mysql:/var/lib/mysql
- ${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d
- ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} # 追記箇所
ports:
- "${MYSQL_PORT}:3306"
networks:
- backend
command: --innodb-use-native-aio=0
user: "1000:50"
MySQLコンテナ再起動
$ docker-compose up -d mysql
ファイルからインポート
コマンドライン
$ docker exec -it 83a350a8c22c bash -c "mysql -udefault -psecret default < /var/www/schema.sql"
MySQLコンテナにログインしてインポート
$ docker exec -it laradock_mysql_1 bash
I have no name!@83a350a8c22c:/$ mysql -udefault -psecret default < /var/www/schema.sql