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

在Azure AKS中通过Kubernetes Job执行Python脚本遇文件找不到错误

问题根源

你遇到的错误核心原因是:官方python:3镜像里根本没有your-script.py文件——Kubernetes不会自动把Azure Cloud Shell本地的脚本复制到容器中,必须手动将脚本传递到容器运行环境里。以下是几种可行的解决办法:


方法1:用ConfigMap挂载脚本(快速测试首选)

通过ConfigMap将本地脚本注入到容器中,无需构建镜像:

  1. 在Azure Cloud Shell中创建ConfigMap,导入你的脚本内容:
# 确保your-script.py在当前工作目录
kubectl create configmap python-log-script --from-file=./your-script.py
  1. 修改Job的YAML配置,添加挂载规则:
apiVersion: batch/v1
kind: Job
metadata:
  name: your-job-name
spec:
  template:
    spec:
      volumes:
      - name: script-volume
        configMap:
          name: python-log-script
      containers:
      - name: your-container-name
        image: python:3
        command: ["python", "/scripts/your-script.py"]
        volumeMounts:
        - name: script-volume
          mountPath: /scripts
      restartPolicy: Never
  1. 应用修改后的Job配置:
kubectl apply -f your-job.yaml

方法2:直接在Command中嵌入脚本内容

适合短脚本快速验证,无需额外资源:
将脚本内容转成单行格式(换行替换为\n),通过python -c执行:

apiVersion: batch/v1
kind: Job
metadata:
  name: your-job-name
spec:
  template:
    spec:
      containers:
      - name: your-container-name
        image: python:3
        command: ["python", "-c", "import sys\nimport datetime as dt\ndef print_to_stdout(*a):\n    print(*a, file=sys.stdout)\nt = dt.datetime.now()\nwhile True:\n    delta = dt.datetime.now()-t\n    if delta.seconds >=30:\n        print_to_stdout(\"Hello World, half minute has passed\")\n        t = dt.datetime.now()"]
      restartPolicy: Never

方法3:构建自定义Docker镜像(生产环境推荐)

长期使用的Job建议打包专属镜像,避免每次挂载或嵌入脚本:

  1. 在Azure Cloud Shell中创建Dockerfile:
FROM python:3
WORKDIR /app
COPY your-script.py .
CMD ["python", "your-script.py"]
  1. 构建镜像并推送到Azure容器注册表(ACR,需提前创建并登录ACR):
# 替换myacr为你的ACR名称,标签可自定义
az acr build --registry myacr --image python-log-script:v1 .
  1. 修改Job YAML使用自定义镜像:
apiVersion: batch/v1
kind: Job
metadata:
  name: your-job-name
spec:
  template:
    spec:
      containers:
      - name: your-container-name
        image: myacr.azurecr.io/python-log-script:v1
      restartPolicy: Never

验证方式

Job启动后,通过以下命令查看容器日志确认脚本运行状态:

# 先获取Pod名称
kubectl get pods
# 替换<pod-name>为实际Pod名称
kubectl logs <pod-name>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 13:32:40