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

Ansible升级至2.12.8后启动Docker容器报command not found错误

问题分析与解决

你的问题出在command参数里的额外单引号上。

当用列表形式给bash -c传递命令串时,不需要给命令串额外包裹单引号。你现在的写法里,第三个参数是'apt update && ...'(带单引号),这会让bash把整个带单引号和空格的字符串当成一个命令去查找,自然会报"command not found"。

Ansible 2.10和2.12之间community.docker.docker_container模块对命令参数的处理逻辑有变化,旧版本可能自动帮你处理了多余的引号,新版本则严格按照你传递的参数原样传递给容器内的bash。

修正后的Playbook代码

把command里的单引号去掉即可:

- name: Launch Docker container with Terraspace image
  register: container_terraspace_apply_result
  community.docker.docker_container:
    name: "terraspace-test"
    image: a-private-ubuntu-base-terraform-image
    working_dir: /opt/terraform
    volumes:
      - "/home/terraform:/opt/terraform:rw"
      - "/home/.aws:/root/.aws:ro"
    command_handling: correct
    entrypoint: ["/bin/bash"]
    command: [
      "-l",
      "-c",
      "apt update && apt install -y build-essential && bundle install && terraspace check_setup && terraspace up rds -y"
    ]
    env:
      REGION: "eu-west-1"
      AWS_REGION: "eu-west-1"
      TS_ENV: "staging"
      AWS_PROFILE: "terraform-staging"

验证逻辑

你之前单独执行"apt"能成功,是因为没有额外引号,bash正确识别了apt命令;而加了单引号的长命令串被当成了一个整体命令名,系统里不存在这个命令,所以报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:15:42