我们有一个 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
这对我有用。