关于 kolla-ansible 部署 openstack 时 keystone 容器启动后立即退出异常
查看原启动脚本 /etc/kolla/keystone/keystone-startup.sh
:
脚本最后一行是
exec /usr/sbin/apache2 $@
这会以默认方式启动 Apache;在 Debian/Ubuntu 的包里,/usr/sbin/apache2
会以守护进程模式(daemonize)启动,父进程(PID 1,也就是脚本本身)很快就退出,导致 Docker 认为主进程结束,容器随之退出(并返回退出码 0)。因此你看到 Exited (0)
就是这个原因 —— 不是 Apache 崩溃,而是主进程没有在前台运行。
解决办法很简单:让 Apache 以前台模式运行,把最后一行改成带 -D FOREGROUND
或使用 apache2ctl -D FOREGROUND
。
修改后脚本如下
#!/bin/bash -x
set -o errexit
set -o pipefail
FERNET_KEY_DIR="/etc/keystone/fernet-keys"
# Ensure Fernet keys are populated, check for 0 (staging) key
n=0
while [ ! -f "${FERNET_KEY_DIR}/0" ]; do
if [ $n -lt 36 ]; then
n=$(( n + 1 ))
echo "ERROR: Fernet keys have not been populated, rechecking in 5 seconds"
echo "DEBUG: ${FERNET_KEY_DIR} contents:"
ls -l ${FERNET_KEY_DIR}
sleep 5
else
echo "CRITICAL: Waited for 3 minutes - failing"
exit 1
fi
done
exec /usr/sbin/apache2 -D FOREGROUND $@
保存后重启 keystone 容器即可
评论区