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
相关产品推荐
相关产品推荐

