繁体   English   中英

以随机(非root)Linux用户身份运行预填充的Docker容器MySQL?

[英]Run MySQL a prefilled docker container as random (non-root) linux user?

我正在尝试创建兼容OpenShift的预填充MySQL容器映像。

对我们而言,(指定)与指定用户运行容器是(可悲的)选择。

这是一个问题,因为OpenShift只是创建一些随机的UID而没有用户名,因此在启动MySQL服务之前,无法在运行时使用脚本设置用户名是一种选择。

有没有办法让MySQL在docker容器中以任何随机UID运行?

编辑:这个问题背后的想法是能够为randomusermysql:example这样的Dockerfile启动一个MySQL容器

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创建它们的Dockerfile相同。 您不会事先知道用户是什么,因此无法与数据库的启动方式匹配,从而导致MySQL在启动时失败,因为拥有数据库文件的目录与正在启动的目录不同。

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

请注意,您将要使创建数据库目录的父目录,组根目录和组可写目录成为父目录,以便在映像作为任意用户ID运行且没有passwd文件条目的情况下可以创建数据库目录。 在这种情况下,组ID将回退为根组,因此将允许创建数据库目录。

问题在于passwd文件或组文件中不存在随机uid。

我在mssql的github页面上发布了一个解决方案: https : //github.com/Microsoft/mssql-docker/issues/121#issuecomment-347766828

解决方案摘要:我用lib-nss-wrapper创建了一个包装器,以便该进程能够查找随机uid。

让我知道您是否需要进一步的说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM