前言
最近在项目里需要把一个 Python 脚本放到 Azure Container Apps (ACA) 的 Job 中定时/按需运行,整理了一套最小示例,方便之后复用。
前提条件
- 已创建 Azure Container Registry (ACR),并确认所在的 resource group、位置。
- 已安装 Docker 与 Azure CLI,且可登录对应 Azure 订阅(具备推送镜像、创建 ACA Job 的权限)。
- 已准备好要运行的 Azure resource group(示例命令里用
RESOURCE_GROUP占位)。
步骤
1. 准备程序
示例脚本会读取环境变量并打印日志,适合作为健康检查或批处理任务的模板。
main.py
import logging
import os
import time
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s",
)
def main():
job_name = os.getenv("JOB_NAME", "demo-job")
sleep_seconds = int(os.getenv("SLEEP_SECONDS", "5"))
logging.info("Job %s started", job_name)
for i in range(sleep_seconds):
logging.info("Running step %s/%s", i + 1, sleep_seconds)
time.sleep(1)
logging.info("Job %s completed", job_name)
if __name__ == "__main__":
main()
Dockerfile
FROM python:3.11-slim
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
COPY main.py .
CMD ["python", "main.py"]
2. 本地环境准备
示例基于 Ubuntu。如果已安装 Docker 与 Azure CLI,可跳过本节。
安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
为避免每次运行 Docker 都需要 sudo,可以查看
这篇
文章。
安装Azure CLI
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
登录Azure
az login
3. 编译镜像并推送到ACR
需要替换的占位符:
ACR_NAME -> Registry 的名字(不含 .azurecr.io)
IMAGE_NAME:VERSION -> 镜像的名字和版本,比如 myapp:latest
ACR_USERNAME -> ACR 管理员账号
ACR_PASSWORD -> ACR 管理员密码
提前登录 Registry(如果已经登录 Azure CLI 会自动通过):
az acr login --name ACR_NAME
如果未登录 Azure CLI,也可以开启 ACR 管理员账户,通过 docker login 登录:
docker login ACR_NAME.azurecr.io -u ACR_USERNAME -p ACR_PASSWORD
账号和密码可以在 ACR 的「访问密钥」页面查看(如下图所示)。

构建并推送镜像到 ACR:
docker build --platform linux/amd64 -t ACR_NAME.azurecr.io/IMAGE_NAME:VERSION .
docker push ACR_NAME.azurecr.io/IMAGE_NAME:VERSION
4. 创建 ACA Job
每个 Job 需要绑定到一个 ACA Environment,以便复用虚拟网络等配置。先创建环境(如已有可跳过):
az containerapp env create \
--name ENVIRONMENT_NAME \
--resource-group RESOURCE_GROUP \
--location japaneast
然后创建 Job:
az containerapp job create \
--name JOB_NAME \
--resource-group RESOURCE_GROUP \
--environment ENVIRONMENT_NAME \
--image ACR_NAME.azurecr.io/IMAGE_NAME:VERSION \
--cpu 1.0 \
--memory 2Gi \
--replica-timeout 1800 \
--replica-retry-limit 2 \
--parallelism 1 \
--replica-completion-count 1 \
--trigger-type Manual \
--env-vars \
JOB_NAME=JOB_NAME \
SLEEP_SECONDS=5 \
--registry-server ACR_NAME.azurecr.io \
--registry-username ACR_USERNAME \
--registry-password ACR_PASSWORD
镜像拉取的认证方式有两种:
- 使用 ACR 管理员账号密码(如上命令所示)。
- 使用托管标识(ACR 未开启管理员账号时)。替换上面命令中的认证参数为:
--registry-identity system \
--mi-system-assigned
下图可以看到当前使用的认证方式。

5. 执行 Job
可以在 Azure 门户点击「Run now」,也可以用 CLI:
az containerapp job start -n JOB_NAME -g RESOURCE_GROUP

执行详情可在「Execution history」中查看日志与退出状态。

结论
按照上述步骤即可将 Python 脚本封装成镜像、推送到 ACR,并通过 Azure Container Apps Job 灵活运行。你可以进一步在 Job 中调整 CPU/内存、并发度,以及改为 Schedule 触发类型以满足定时任务场景。