使用Kamal部署Rails遇Docker非TTY交互式登录错误求助
解决Kamal部署Rails应用时的Docker交互式登录错误
问题现象
使用Kamal结合Docker Hub部署Rails应用,手动执行docker login -u username -p api-key可成功登录,但运行kamal setup时出现错误:Cannot perform an interactive login from a non TTY device,无法完成镜像仓库的镜像创建。
解决方案
1. 修正deploy.yml的registry配置格式
你的registry部分的username和password使用了错误的数组格式,Kamal要求直接引用环境变量名称,正确配置如下:
registry: # Specify the registry server, if you're not using Docker Hub username: KAMAL_REGISTRY_USERNAME # Always use an access token rather than real password (pulled from .kamal/secrets). password: KAMAL_REGISTRY_PASSWORD
原数组写法(- KAMAL_REGISTRY_USERNAME)会导致Kamal无法正确读取凭证,进而触发交互式登录请求。
2. 修复.env文件的变量格式
.env文件中等号两侧的空格会导致环境变量解析失败,修正为:
KAMAL_REGISTRY_USERNAME="username" KAMAL_REGISTRY_PASSWORD="api-key" RAILS_MASTER_KEY="rails-master-key"
3. 预配置服务器的Docker登录(可选)
如果上述配置修正后仍存在问题,可手动在目标服务器(192.168.0.1)执行非交互式登录,提前保存凭证:
echo "你的api-key" | docker login -u "你的username" --password-stdin docker.io
此操作会将登录凭证保存到服务器的~/.docker/config.json中,Kamal后续操作会直接复用该凭证,避免触发登录流程。
问题原因
错误本质是Kamal在操作镜像时未正确获取到Docker Hub的凭证,导致尝试启动交互式登录,但非TTY环境无法响应。核心诱因是registry配置格式错误,导致凭证未被注入到Kamal的操作流程中。
内容的提问来源于stack exchange,提问作者user27915014
相关产品推荐
相关产品推荐

