gpt4 book ai didi

mysql - 具有现有数据库的 Mariadb 多阶段容器

转载 作者:行者123 更新时间:2023-12-02 18:00:01 24 4
gpt4 key购买 nike

我需要使用现有数据库创建一个容器,并在分发它之前对其进行一些操作。
在生产中,我有一些非常大的数据库:

[root]# ls /home/db-backup/test/prepare/26_06_2020/full/
ibdata1
ib_logfile0
ib_logfile1
ibtmp1
mysql
performance_schema
my_existing_database1
my_existing_database2
my_existing_database3
我只需要发布一个容器 my_existing_database1为我的团队。
我尝试了很多 Dockerfile,但我找不到办法解决它,我不明白为什么。
这是一个简化的 Dockerfile :
FROM mariadb:latest as builder

ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

# for easier debug, i will remove that in prod
RUN sed -i '/\[mysqld\]/a plugin-load-add = auth_socket.so' /etc/mysql/my.cnf

WORKDIR /initialized-db

COPY ibdata1 .
COPY mysql ./mysql
COPY performance_schema ./performance_schema
COPY my_existing_database1 ./my_existing_database1
COPY db-init.sh /docker-entrypoint-initdb.d/

RUN chown mysql:mysql . \
&& chmod 660 ibdata1 \
&& chmod +x /docker-entrypoint-initdb.d/db-init.sh

RUN ["/usr/local/bin/docker-entrypoint.sh", "mysqld", "--datadir", "/initialized-db", "--aria-log-dir-path", "/initialized-db"]

# No file named test
RUN ls /initialized-db/

FROM mariadb:latest
COPY --from=builder /initialized-db /var/lib/mysql
如您所见,我尝试执行我的脚本 db-init.sh .简化版:
#!/bin/bash
set -e -x

mysql -u root -e "CREATE USER 'test'@'%' IDENTIFIED BY 'test';"
touch /initialized-db/test
不幸的是,我的脚本没有作为文件 test 执行。未创建。
我尝试绕过 /usr/local/bin/docker-entrypoint.sh使用我自己的脚本(通过一些编辑复制/粘贴文件)但它也不起作用(用户和文件 test 未创建)。
你能帮我解决这个问题吗?

最佳答案

您最好为数据挂载一个目录,然后再分发它。
如果您必须将它与容器本身一起分发,您应该能够编辑该数据库的配置以使用自定义数据目录并使用 RUN 在其中初始化您的数据库。和 COPY .

关于mysql - 具有现有数据库的 Mariadb 多阶段容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62617982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com