如何在CircleCI任务中执行docker run命令及command not found报错排查
问题根因
你出现报错的核心原因有两个:
- 你配置的
docker执行器使用的基础镜像是xyz.ecr.us-west-2.amazonaws.com/abc,这个镜像内部没有预装Docker CLI工具,所以执行docker命令时系统找不到对应执行文件 - 即便你给这个镜像预装了Docker CLI,默认的
docker执行器环境也没有运行Docker守护进程,根本无法执行docker run这类容器操作
可选解决方案
方案1:Docker执行器 + 启动远程Docker环境
把执行器基础镜像换成官方预装了Docker CLI的镜像,再新增setup_remote_docker步骤启动Docker守护进程即可,配置修改参考:
circleci_job: docker: # 替换为预装Docker CLI的官方基础镜像,也可根据需求选择其他带Docker的镜像 - image: cimg/base:stable steps: - checkout # 新增步骤:启动远程Docker环境 - setup_remote_docker: version: 20.10.14 # 可指定你需要的Docker版本 - run: name: 拉取目标镜像并执行命令 command: | export env1=https://example.com # 如果是私有ECR镜像,需要先加登录步骤,公开镜像可省略 aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin xyz.ecr.us-west-2.amazonaws.com docker run xyz.ecr.us-west-2.amazonaws.com/abc --some command
方案2:改用Machine执行器
Machine执行器是CircleCI提供的完整虚拟机环境,自带完整Docker运行环境,不需要额外配置远程Docker,配置修改参考:
circleci_job: # 改用machine执行器 machine: image: ubuntu-2204:2023.04.1 # 可选择你需要的机器镜像版本 steps: - checkout - run: name: 执行docker run命令 command: | export env1=https://example.com # 私有ECR镜像同样需要先加登录步骤 aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin xyz.ecr.us-west-2.amazonaws.com docker run xyz.ecr.us-west-2.amazonaws.com/abc --some command
额外注意事项
- 私有镜像场景下,需要提前在CircleCI项目的环境变量中配置
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY两个凭证,保证可以正常拉取ECR镜像 - 如果你本身的需求就是直接在abc镜像的容器内执行命令,不需要嵌套启动容器,直接把要执行的命令写在
run步骤中即可,不需要额外调用docker run
内容的提问来源于stack exchange,提问作者flux0987
相关产品推荐
相关产品推荐

