首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在多级码头生成中复制MariaDB数据dir

问无法在多级码头生成中复制MariaDB数据dir
EN

Stack Overflow用户
提问于 2019-01-25 08:39:41
回答 1查看 234关注 0票数 2

我正在尝试从mariadb:10.3.12创建一个新的Docker映像,该映像包含预定义的数据库模式collectives和该模式中一些预填充的数据库表。

我的Dockerfile确实声明了两个阶段:

  1. 第一个阶段是构建器阶段,负责创建模式collectives并将数据导入该模式。
  2. 然后,第二阶段应该简单地复制第一阶段的数据dir。因此,它是一个预初始化的MariaDB码头映像。

这就是Dockerfile的样子:

代码语言:javascript
复制
FROM mariadb:10.3.12 as builder

ENV MYSQL_ROOT_PASSWORD=abc
ENV MYSQL_DATABASE=collectives
ENV MYSQL_USER=abc
ENV MYSQL_PASSWORD=abc

ADD server.jar app.jar
ADD openjdk-11.0.2_linux-x64_bin.tar.gz /usr/lib/jvm
ADD import.sh import.sh

RUN chmod +x import.sh && ./import.sh

FROM mariadb:10.3.12

ENV MYSQL_DATABASE=collectives
ENV MYSQL_USER=abc
ENV MYSQL_PASSWORD=abc

COPY --from=builder /var/lib/mysql /var/lib/mysql

EXPOSE 3306

ENTRYPOINT ["./docker-entrypoint.sh", "mysqld",  "--collation-server=utf8mb4_unicode_ci", "--character-set-server=utf8mb4",  "--innodb-flush-log-at-trx-commit=0"]

当我使用

代码语言:javascript
复制
docker build -t huhu .

第一个builder阶段的一切都如预期的那样工作。意味着MariaDB启动。然后,它创建模式collectives。数据由import.sh脚本导入。

在import.sh中,我添加了调试命令tree /var/lib/mysql,其中列出了控制台中/var/lib/mysql的内容。该命令的结果是:

代码语言:javascript
复制
/var/lib/mysql
|-- aria_log.00000001
|-- aria_log_control
|-- collectives
|   |-- collective_partner.frm
|   |-- collective_partner.ibd
|   |-- db.opt
|   |-- flyway_schema_history.frm
|   |-- flyway_schema_history.ibd
|   |-- price_record.frm
|   `-- price_record.ibd
|-- ib_buffer_pool
|-- ib_logfile0
|-- ib_logfile1
|-- ibdata1
|-- multi-master.info
|-- mysql
|   |-- column_stats.MYD
|   |-- column_stats.MYI
|   |-- column_stats.frm
|   |-- columns_priv.MYD
|   |-- columns_priv.MYI
|   |-- columns_priv.frm
|   |-- db.MYD
|   |-- db.MYI
|   |-- db.frm
|   |-- event.MYD
|   |-- event.MYI
|   |-- event.frm
|   |-- func.MYD
|   |-- func.MYI
|   |-- func.frm
|   |-- general_log.CSM
|   |-- general_log.CSV
|   |-- general_log.frm
|   |-- gtid_slave_pos.frm
|   |-- gtid_slave_pos.ibd
|   |-- help_category.MYD
|   |-- help_category.MYI
|   |-- help_category.frm
|   |-- help_keyword.MYD
|   |-- help_keyword.MYI
|   |-- help_keyword.frm
|   |-- help_relation.MYD
|   |-- help_relation.MYI
|   |-- help_relation.frm
|   |-- help_topic.MYD
|   |-- help_topic.MYI
|   |-- help_topic.frm
|   |-- host.MYD
|   |-- host.MYI
|   |-- host.frm
|   |-- index_stats.MYD
|   |-- index_stats.MYI
|   |-- index_stats.frm
|   |-- innodb_index_stats.frm
|   |-- innodb_index_stats.ibd
|   |-- innodb_table_stats.frm
|   |-- innodb_table_stats.ibd
|   |-- plugin.MYD
|   |-- plugin.MYI
|   |-- plugin.frm
|   |-- proc.MYD
|   |-- proc.MYI
|   |-- proc.frm
|   |-- procs_priv.MYD
|   |-- procs_priv.MYI
|   |-- procs_priv.frm
|   |-- proxies_priv.MYD
|   |-- proxies_priv.MYI
|   |-- proxies_priv.frm
|   |-- roles_mapping.MYD
|   |-- roles_mapping.MYI
|   |-- roles_mapping.frm
|   |-- servers.MYD
|   |-- servers.MYI
|   |-- servers.frm
|   |-- slow_log.CSM
|   |-- slow_log.CSV
|   |-- slow_log.frm
|   |-- table_stats.MYD
|   |-- table_stats.MYI
|   |-- table_stats.frm
|   |-- tables_priv.MYD
|   |-- tables_priv.MYI
|   |-- tables_priv.frm
|   |-- time_zone.MYD
|   |-- time_zone.MYI
|   |-- time_zone.frm
|   |-- time_zone_leap_second.MYD
|   |-- time_zone_leap_second.MYI
|   |-- time_zone_leap_second.frm
|   |-- time_zone_name.MYD
|   |-- time_zone_name.MYI
|   |-- time_zone_name.frm
|   |-- time_zone_transition.MYD
|   |-- time_zone_transition.MYI
|   |-- time_zone_transition.frm
|   |-- time_zone_transition_type.MYD
|   |-- time_zone_transition_type.MYI
|   |-- time_zone_transition_type.frm
|   |-- transaction_registry.frm
|   |-- transaction_registry.ibd
|   |-- user.MYD
|   |-- user.MYI
|   `-- user.frm
`-- performance_schema
    `-- db.opt

所以,正如你在第一阶段所看到的,一切都在那里。但是,第二阶段的COPY --from=builder /var/lib/mysql /var/lib/mysql似乎没有在该目录中找到相同的数据。

我正在使用潜水检查结果码头映像,而COPY指令似乎导致了一个没有操作的步骤。

​

​

谁能告诉我为什么码头不复制这些文件到第二阶段?如有任何提示,将不胜感激。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-26 07:55:43

/var/lib/mysql是mariadb映像中的卷,因此数据不会存储在映像中。将数据存储在图像中,而不是默认卷中。例如,运行:

代码语言:javascript
复制
mkdir /data && sed -i -e "s#/var/lib/mysql#/data#g" /etc/mysql/my.cnf

在从/data导入和复制数据之前。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54361657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档