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

Rancher Desktop(WSL2/Win11)中mssql-tools Pod出现CrashLoopBackOff故障

问题原因与解决方案

问题根源

从kubectl describe pod的输出能看到,容器退出原因是Completed、退出码为0——这说明容器正常启动后立刻执行完默认命令就退出了。Kubernetes默认重启策略为Always,会不断重启退出的容器,最终导致CrashLoopBackOff状态。

而直接用Docker运行时能正常使用,是因为你用了-it参数,Docker会为容器分配伪终端并进入交互模式,容器内的shell会持续运行;但Kubernetes默认以后台模式启动容器,没有长期运行的前台进程时,容器就会立即终止。

解决方案

有三种常见处理方式,按需选择:

1. 让容器长期存活(用于交互式操作)

修改Pod的YAML,指定一个长期运行的前台命令(比如tail -f /dev/null),让容器保持运行状态,之后可通过kubectl exec进入容器使用sqlcmd:

apiVersion: v1
kind: Pod
metadata:
  name: mssql-tools
  labels:
    name: mssql-tools
spec:
  containers:
  - name: mssql-tools
    image: mcr.microsoft.com/mssql-tools:latest
    command: ["tail", "-f", "/dev/null"]

创建Pod后,执行以下命令进入容器:

kubectl exec -it mssql-tools -- bash

进入容器后即可正常使用sqlcmd命令。

2. 执行一次性SQL命令(无需容器长期存活)

如果仅需执行一次性SQL操作,可直接在Pod的command里指定sqlcmd完整命令,同时设置重启策略为OnFailure或Never避免循环重启:

apiVersion: v1
kind: Pod
metadata:
  name: mssql-tools
  labels:
    name: mssql-tools
spec:
  restartPolicy: OnFailure
  containers:
  - name: mssql-tools
    image: mcr.microsoft.com/mssql-tools:latest
    command: ["sqlcmd", "-S", "your-sql-server-host", "-U", "sa", "-P", "your-password", "-Q", "SELECT @@VERSION"]

替换其中的数据库地址、账号、密码和SQL语句即可。

3. 快速创建临时Pod(无需编写YAML)

如果只是临时需要使用mssql-tools,可直接用kubectl run命令创建带长期运行命令的Pod:

kubectl run mssql-tools --image=mcr.microsoft.com/mssql-tools:latest --command -- tail -f /dev/null

之后同样用kubectl exec -it mssql-tools -- bash进入容器操作。

内容的提问来源于stack exchange,提问作者Farrukh Waheed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:50:30