【问题标题】:Unable to upload data to mariadb container from docker volume无法从 docker 卷上传数据到 mariadb 容器
【发布时间】:2019-02-13 18:16:25
【问题描述】:

我正在使用 mariadb 作为 mysql docker 容器,并且无法从 docker 卷上传数据。

我的数据库 dockerfile 与此链接上发布的类似。 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/getting_started_with_containers/install_and_deploy_a_mariadb_container

我不想像上面链接中的示例那样导入数据,而是从 docker 卷中导入它。

我确实尝试使用 docker-entrypoint.sh 示例,在该示例中循环遍历 docker-entrypoint-initdb.d 中的文件,但这可能会导致 mysql.sock 错误,因为数据库已经从 dockerfile RUN 命令关闭。

database:
  build:
    context: ./database
  ports:
    - "3306:3306"
  volumes:
    - ./data/data.sql:/docker-entrypoint-initdb.d/data.sql
  environment:
    - MYSQL_DATABASE=hell
    - MYSQL_USER=test
    - MYSQL_PASSWORD=secret
    - MYSQL_ROOT_PASSWORD=secret

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    我认为你的问题是这样的:

    您想通过挂载卷获取架构,但在数据库中看不到,对吧?

    首先,如果您打算使用mariadb,您可以使用MariaDB Official Docker Image.

    因此,通过这种方式,您可以避免使用 redhat 图像或自定义构建。

    其次,您正在复制此 SQL,但您没有运行 mysql import o dump 或类似的东西。所以,你可以做的是在你的 docker-compose 中输入一个命令(例如):

    
    database:
      build:
        context: ./database
      ports:
        - "3306:3306"
      volumes:
        - ./data/data.sql:/docker-entrypoint-initdb.d/data.sql
      environment:
        - MYSQL_DATABASE=hell
        - MYSQL_USER=test
        - MYSQL_PASSWORD=secret
        - MYSQL_ROOT_PASSWORD=secret
      command: "mysql -u username -p database_name < file.sql"
    
    

    但这不是最好的方法。

    另一方面,您可以按照 MariaDB 文档,设置挂载卷,并在第一次运行时导入数据。并且使用该卷,您不必再次运行导入。 这是您必须放置的坐骑:

     /my/own/datadir:/var/lib/mysql
    

    显然,您可以将 sql 文件挂载到 /tmp/ 文件夹中,仅此而已,然后使用 docker exec 执行 sh 并从内部运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 2022-01-18
      • 1970-01-01
      • 2022-07-18
      • 1970-01-01
      相关资源
      最近更新 更多