所以,我希望在 MySQL Docker 容器启动后立即运行一个脚本(并且已经通过
mysql
图像中定义的入口点),我知道 docker-entrypoint-initdb.d
的存在,但这种方法存在问题我不知道如何修复:脚本是在 mysql
用户下执行的,而不是 root
,并且我需要 root
访问权限。
我尝试创建一个自定义入口点来获取
docker-entrypoint.sh
,但它不起作用:
#!/bin/bash
echo aaaa
source /.../docker-entrypoint.sh
_main "$@"
echo bbbb
这不起作用,MySQL 之后未初始化(尽管回显有效)。
那么,在数据库初始化后,我应该怎么做才能以
root
的方式运行脚本呢?
├── Dockerfile
└── entrypoint.sh
🗎
Dockerfile
FROM mysql:latest
COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
🗎
entrypoint.sh
(这是自定义的入口点。它从基础映像运行入口点,然后等待 MySQL 服务器变得可用。一旦可用,它就会确认当前用户是 root
,然后准备好执行任何操作你需要。)
#!/bin/bash
/usr/local/bin/docker-entrypoint.sh mysqld >/dev/null 2>&1 &
PID="$!"
while ! mysqladmin ping -h"localhost" --silent; do
echo "🟠 Wait for MySQL to be ready..."
sleep 1
done
echo "🟢 MySQL is ready."
echo "🟦 Current user: $(whoami)"
# Do other things here...
wait "$PID"