gpt4 book ai didi

mysql - 如何在 Dockerfile 'CMD ["mysqld"]' 之后运行脚本 shell?

转载 作者:行者123 更新时间:2023-11-29 09:41:18 25 4
gpt4 key购买 nike

我有一个在 Docker 容器上运行的 MariaDB 镜像,出于安全原因,该镜像必须在每次初始化时更新其 root 密码。有一个保管库服务器,我的容器每次初始化时都会从该服务器获取新密码。获得新密码后,必须运行我的脚本才能登录 MariaDB 数据库并更新密码。我已经尝试了几种策略来在 MariaDB 数据库启动并运行后立即运行此类脚本,但到目前为止还没有成功。我确实使用 Dockerfile 来构建我的 MariaDB 扩展镜像。最后,有一个启动服务的“CMD [“mysqld”]”。问题是我的脚本必须在“CMD [“mysqld”]”命令之后运行,因为它是初始化 MariaDB 进程的命令,然后它变为“准备连接”。

有什么方法可以解决这种情况,以便在 MariaDB 服务启动并运行后立即运行我的 shell 脚本([“/foreground.sh”])?重要的是要记住,容器初始化后不允许人为操作。因此,每个操作都必须通过脚本 shell 进行,因为该项目适用于生产环境,我无法访问该环境。

我的 Dockerfile 的相关部分

VOLUME /var/lib/mysql
EXPOSE 3306
COPY docker-entrypoint.sh /
COPY foreground.sh /
RUN chmod +x /docker-entrypoint.sh /foreground.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["mysqld"] ["/foreground.sh"]

我的“foreground.sh”的相关部分

    mysql -u"root" -p"$ROOT_PASSWORD" <<MariaDB_INPUT
UPDATE mysql.user SET authentication_string=PASSWORD("$MYSQL_ROOT_PASSWORD_NEW_VAULT") WHERE USER="root";
UPDATE mysql.user SET authentication_string=PASSWORD("$MYSQL_PASSWORD_NEW_VAULT") WHERE USER="user";
UPDATE mysql.user SET plugin="mysql_native_password";
FLUSH PRIVILEGES;
quit

MariaDB_INPUT

最佳答案

如果您使用 official image for MariaDB ,您只需将脚本添加到文件夹 /docker-entrypoint-initdb.d/* 即可。

看看docker-entrypoint.sh script :

  • 第 110 行 - 脚本正在等待实例运行并接受查询。
  • 第 178 行 - 脚本从目录 /docker-entrypoint-initdb.d/* 运行自定义脚本

因此,您只需将更改密码脚本添加到正确的位置,它将在实例准备好更新密码后运行。您不必更改 CMDENTRYPOINT 值。

关于mysql - 如何在 Dockerfile 'CMD ["mysqld"]' 之后运行脚本 shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56567766/

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