Docker Compose mysql 导入 .sql

新手上路,请多包涵

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

我试过用 -vf 标志停止容器,但这也不起作用。我在我的 .yml 脚本中做错了吗?

我的 compose 文件所在的根目录中的 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

原文由 GafferG 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

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

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

FROM mysql:5.6

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

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

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

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

原文由 GafferG 发布,翻译遵循 CC BY-SA 3.0 许可协议

这对我有用,

 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 必须是一个目录。将导入目录中的所有 .sql。

原文由 Sridhar Sg 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题