无法从Docker卷将数据上传到mariadb容器

时间:2019-02-13 18:16:25

标签: docker docker-compose dockerfile

我使用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中的文件,但这使我收到myssql.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

1 个答案:

答案 0 :(得分:0)

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

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

首先,如果您打算使用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并从内部运行它。