运行MySQL一个预填充的docker容器作为随机(非root)linux用户?

前端之家收集整理的这篇文章主要介绍了运行MySQL一个预填充的docker容器作为随机(非root)linux用户?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在尝试创建一个符合OpenShift标准的预填充MySQL容器映像.

使用指定用户运行容器(遗憾的是)不是我们的选择.

这是一个问题,因为OpenShift只是创建一个没有用户名随机UID,因此在启动MysqL服务之前在运行时使用脚本设置用户名不是一个选项.

有没有办法让MysqL与docker容器中的任何随机UID一起运行?

编辑:
这个问题背后的想法是能够像这样启动一个MysqL容器
randomuserMysqL的Dockerfile:示例

FROM MysqL:5.7.22

#IMPORTANT: MysqL Container runs init in alphanumerical order!
COPY src/some.sql /docker-entrypoint-initdb.d/

ENV MysqL_ROOT_PASSWORD='somepw'

RUN mkdir -p /var/lib/MysqL2 && \
    chown -R MysqL:MysqL /var/lib/MysqL2 && \
    chmod -R 777 /var/lib/MysqL2 && \
    sed -i 's|/var/lib/MysqL|/var/lib/MysqL2|g' /etc/MysqL/MysqL.conf.d/MysqLd.cnf && \
    sed -i 's|exec "$@"||g' /entrypoint.sh && \
    /entrypoint.sh MysqLd && \
    chmod -R 777 /var/lib/MysqL2/ && \
    chown -R MysqL:MysqL /var/lib/MysqL2 && \
    find /var/lib/MysqL2/ -name "*.cnf" -exec chmod 775 {} \; && \
    echo 'exec "$@"' >> /entrypoint.sh

然后像这样开始

docker run -u 123456789 randomuserMysqL:example

启动容器时导致以下错误

2018-05-22T11:39:35.084034Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table storage engine for 'user' doesn't have this option
2018-05-22T11:39:35.084235Z 0 [ERROR] Aborting

在启动容器时,不可能将用户作为docker ENV传递

edit2:赏金文字不正确.
更正了赏金声明:
预先填充的MysqL数据库需要一个解决方案,而不必将转储文件复制到/docker-entrypoint-initdb.d目录中!

最佳答案
问题是,如果您在所需位置预先创建数据库文件作为映像的一部分,那么它们将具有与创建它们的Dockerfile相同的用户.您不会事先知道用户是什么,因此无法匹配数据库可能启动的内容,导致MysqL在启动时失败,因为拥有数据库文件的目录与启动它的目录不同.

我看到的唯一解决方案是将数据库文件添加到某个位置的tar文件中的图像中.在数据库的启动命令中,为数据库创建目录并将tar文件解压缩到其中.这样,目录和文件将是MysqL运行的用户.

请注意,您需要创建数据库目录创建位置的父目录,按组分组并可按组写入,以便在映像作为没有passwd文件条目的任意用户ID运行时创建数据库目录.在这种情况下,组ID将回退为根组,因此将允许创建数据库目录.

猜你在找的Docker相关文章