You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Kamal应用迁移至新目标名称的技术咨询

解决方案

要将旧的默认Kamal应用关联到新的production目标,实现无停机部署并自动切换流量,按以下步骤操作:

1. 对齐配置中的服务名称

确保deploy.production.yml里的service字段和原deploy.yml完全一致。Kamal通过服务名称识别同一应用集群,不一致会被当作独立应用处理。

例如原deploy.yml配置:

service: my-rails-app
# 其他配置...

deploy.production.yml必须保持相同的service值:

service: my-rails-app
# 其他production专属配置...

2. 给旧容器添加Production目标标签

Kamal通过容器的kamal.target标签区分不同环境目标。原默认应用的容器标签为kamal.target=default,需要修改为kamal.target=production,让Kamal将其纳入production目标集群。

在所有生产服务器上执行以下命令(替换<your-service-name>为实际服务名):

# 筛选出默认目标的应用容器,添加production标签
docker ps -q --filter "label=kamal.target=default" --filter "label=com.docker.compose.service=<your-service-name>" | xargs docker container update --label-add kamal.target=production

3. 验证关联结果

执行命令检查是否能识别到旧容器:

kamal details -d production

如果输出中能看到原生产环境的容器信息,说明关联成功。

4. 执行无停机部署

直接运行production目标的部署命令:

kamal deploy -d production

Kamal会按以下流程完成无停机更新:

  • 启动新的production应用容器
  • 等待新容器通过健康检查
  • 自动更新kamal-proxy的路由配置,将流量切换到新容器
  • 停止旧容器,释放资源

整个过程不会出现端口冲突,因为proxy负责流量转发,容器内部端口不直接暴露给主机,新旧容器的启动/停止由Kamal有序管控。


内容的提问来源于stack exchange,提问作者Wesley Botham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 10:36:00