Dokku+Herokuish部署失败:exec launcher缺失原因及解决方法
问题分析与解决
为什么会缺失launcher二进制文件?
gliderlabs/herokuish:latest-24是基于Ubuntu 24.04的构建镜像,和旧版本(比如基于Ubuntu 20.04的latest-20)相比,构建包的目录结构或launcher的安装逻辑有变更。而你的Dokku v0.35.18版本发布于2024年早期,尚未完全适配Ubuntu 24.04版本的herokuish镜像,导致构建过程中launcher没有被正确注入到最终的应用镜像中。
另外,部署缓存也可能是诱因:如果之前用旧版本herokuish构建过应用,缓存的构建层可能和新版本herokuish的逻辑冲突,导致launcher文件丢失。
解决方法
方法1:降级herokuish镜像到兼容版本
指定使用基于Ubuntu 20.04的herokuish镜像,这个版本和Dokku v0.35.18兼容性更好:
- 设置应用的herokuish镜像版本:
dokku config:set my-app HEROKUISH_IMAGE=gliderlabs/herokuish:latest-20 - 清除构建缓存并重新部署:
dokku repo:purge-cache my-app git push dokku main
方法2:手动指定容器入口点(临时 workaround)
如果需要继续使用latest-24镜像,可以绕过launcher,直接设置应用的启动命令为入口点:
- 覆盖容器的入口点和命令:
dokku docker-options:add my-app deploy "--entrypoint='bundle'" dokku docker-options:add my-app deploy "exec puma -C config/puma.rb" - 重启应用:
dokku ps:restart my-app
注意:这个方法只是临时解决,可能会绕过herokuish的环境初始化逻辑,建议优先用方法1。
方法3:升级Dokku到兼容版本
Dokku的新版本(比如v0.36+)已经适配了Ubuntu 24.04的herokuish镜像,可以考虑升级Dokku:
- 备份应用数据(重要):
dokku backup:create my-app - 升级Dokku:
curl https://raw.githubusercontent.com/dokku/dokku/v0.36.x/bootstrap.sh | sudo DOKKU_TAG=v0.36.0 bash - 重新部署应用:
dokku repo:purge-cache my-app git push dokku main
方法4:检查并重置构建配置
如果应用有自定义的构建脚本或Procfile,确认没有覆盖herokuish的默认逻辑:
- 查看当前的启动命令配置:
dokku ps:inspect my-app - 重置启动命令为默认值:
dokku config:unset my-app DOKKU_PROXY_PORT_MAP dokku config:unset my-app DOKKU_APP_COMMAND - 清除缓存后重新部署。
内容的提问来源于stack exchange,提问作者Tomáš Landovský
相关产品推荐
相关产品推荐

