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