如何使用 Ansible docker_container 传递多个命令

如何使用 Ansible docker_container 传递多个命令

我们有一个 Django 容器,在启动时我们需要运行两个不同的命令:

python manage.py collectstatic --noinput

gunicorn myproj.wsgi

我们尝试过各种各样的方法,但结果总是一样的:

FAILED! => {"changed": false, "msg": "usage: manage.py collectstatic [-h] [--noinput] [--no-post-process]
[-i PATTERN] [-n] [-c] [-l]
[--no-default-ignore] [--version]
[-v {0,1,2,3}] [--settings SETTINGS]
[--pythonpath PYTHONPATH] [--traceback]
[--no-color] [--force-color] [--skip-checks]
manage.py collectstatic: error: unrecognized arguments: gunicorn myproj.wsgi", "status": 2}

我们几乎尝试了所有解决方案,/bin/bash -c 'python manage.py collectstatic --noinput && gunicorn myproj.wsgi'

问题是:Ansible 将第二个命令解释为第一个命令的参数,如文档所述这里

问题是:如何将两个或更多命令传递给 docker 容器?创建入口点脚本是唯一的解决方法吗?

答案1

您可以使用查找类型插件(with_items)以及(community.docker.docker_container_exec)模块,如下所示:

  • 名称:在 foo 容器内执行多个命令

    community.docker.docker_container_exec:
      container: foo
      command: /bin/bash -c "{{ item }}"
    register: result
    with_items:
      - ls -lah
      - ping -c 2 8.8.8.8
    

这对我有用。

相关内容