为什么Docker构建完成后我的HBase服务没有正常运行?
问题原因
docker-compose.yml中配置的command字段会覆盖Dockerfile中定义的CMD指令:你配置的command: tail -F /dev/null让容器启动后只执行了tail命令,完全没有运行HBase的启动脚本,自然不会有HBase进程。- 就算去掉
command配置,默认的/opt/hbase-1.2.0/bin/start-hbase.sh是后台守护进程启动模式,脚本执行完成后就会退出,Docker容器PID1进程退出后容器会直接终止,HBase就算启动成功也会随着容器退出而停止。
修复方案
- 先修改
docker-compose.yml,删除多余的command配置,修改后内容参考:
version: "3" services: hbase: build: . # 可选:暴露HBase WebUI端口方便访问 ports: - "16010:16010"
- 修改Dockerfile的
CMD指令,改为前台运行模式避免容器退出:
将原有的CMD ["/opt/hbase-1.2.0/bin/start-hbase.sh"]替换为以下任意一种即可:
# 直接前台启动HMaster进程 CMD ["/opt/hbase-1.2.0/bin/hbase", "master", "start"]
# 单机模式下先启动所有组件,再阻塞打印日志避免容器退出 CMD /opt/hbase-1.2.0/bin/start-hbase.sh && tail -F /opt/hbase-1.2.0/logs/*.log
- 可选检查项:确认
hbase-site.xml配置适配单机运行模式,避免启动失败,核心配置参考:
<configuration> <property> <name>hbase.rootdir</name> <value>file:///var/opt/hbase</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/var/opt/zookeeper</value> </property> <property> <name>hbase.cluster.distributed</name> <value>false</value> </property> </configuration>
修改完成后执行docker-compose up --build重新构建启动容器,进入容器执行jps即可看到运行中的HMaster进程。
内容的提问来源于stack exchange,提问作者Omegaspard
相关产品推荐
相关产品推荐

