Ubuntu22.04部署HDP2.6.5 Docker遇D-Bus连接错误及服务启动失败求助
解决HDP 2.6.5 Docker容器中systemctl报错及Ambari启动失败问题
问题根源
systemctl 依赖systemd和D-Bus服务运行,但Docker容器默认常以非systemd进程作为PID 1,且未正确挂载cgroup或配置D-Bus环境,导致无法建立D-Bus连接,进而无法通过systemctl管理postgresql,最终影响Ambari启动。
解决步骤
1. 确认容器是否以systemd为PID 1运行
进入容器执行以下命令,查看PID 1的进程:
docker exec -it sandbox-hdp ps -ef | grep 1
如果输出不是/usr/lib/systemd/systemd,则需要重新启动容器并配置systemd支持。
2. 重新启动容器以支持systemd
HDP沙箱容器需要特权模式并挂载cgroup才能正常运行systemd,执行以下启动命令(替换<hdp-image-id>为你的镜像ID):
docker stop sandbox-hdp docker rm sandbox-hdp docker run -d \ --name sandbox-hdp \ --privileged \ -v /sys/fs/cgroup:/sys/fs/cgroup:ro \ -p 1080:1080 \ <hdp-image-id>
3. 临时修复D-Bus环境(无需重启容器)
如果不想重启容器,进入容器后手动配置D-Bus环境变量,再尝试重启postgresql:
docker exec -it sandbox-hdp bash export DBUS_SESSION_BUS_ADDRESS=unix:path=/var/run/dbus/system_bus_socket # 尝试直接用postgresql启动脚本,避免依赖systemctl su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl restart -D /var/lib/pgsql/9.6/data"
注:postgresql的安装路径和数据目录请根据容器内实际情况调整,可通过find / -name pg_ctl查找路径。
4. 排查postgresql启动失败详情
查看postgresql日志定位具体问题:
docker exec -it sandbox-hdp tail -n 50 /var/log/postgresql/postgresql-9.6-main.log
5. 重启Ambari服务
确保postgresql正常运行后,启动Ambari:
docker exec -it sandbox-hdp ambari-server start
若仍失败,查看Ambari日志:
docker exec -it sandbox-hdp tail -n 50 /var/log/ambari-server/ambari-server.log
内容的提问来源于stack exchange,提问作者Zin Paing Oo
相关产品推荐
相关产品推荐

