我尝试完成的是在Docker容器内运行命令,该容器已经使用Ansible在Digital Ocean Ubuntu/Docker Droplet上创建。
在这上面似乎找不到任何东西,或者我错过了一些东西。这是我在战术手册上的Ansible任务。我对Ansible非常陌生,所以任何建议或智慧都将非常感谢。
- name: Test Deploy
hosts: [my-cluster-of-servers]
tasks:
- name: Go Into Docker Container And Run Multiple Commands
docker:
name: [container-name]
image: [image-ive-created-container-with-on-server]
state: present
command: docker exec -it [container-name] bash
7条答案
按热度按时间ql3eal8s1#
在与一些非常有帮助的ansible github project开发人员讨论之后,一个更好的方法是这样的:
如果您的映像中安装了python,您可以使用command模块或任何其他模块来代替raw。
如果要在远程Docker主机上执行此操作,请添加:
添加到add_host块。
有关更完整的示例,请参阅Ansible文档。
sy5wg1nm2#
您应该能够使用
docker exec
执行脚本(其中包含您的命令序列):(See也称为"Why do I have to use
bash -l -c
inside my container?")条件:
docker exec
权限docker exec -u user
)/path/to/log
是容器内的路径,可以在卷中共享。cbeh67ev3#
您可以使用command module在Docker容器内运行命令。例如,此代码将在远程计算机上的my_container内执行
echo "Hello remote machine"
:要在本地计算机中运行相同的命令,只需使用
local_action
标志:u4dcyp6a4#
由于Ansible 2.10
docker_container_exec
是community.docker
集合的一部分:dojqjjoe5#
更新:有一种方法可以做到这一点,而不使用我的模块,请参阅我的其他答案
我写了一个简单的模块来在远程Docker主机上运行exec。我有submitted it to the ansible project,但是如果需要的话,你可以很容易地将它添加到你自己的项目中。这个模块只有23行长,从我的pull请求中提取它,并将它添加到你的./library目录中,然后你可以在你的剧本中添加一个任务,如下所示:
qgzx9mmu6#
最后做了这样的事:
kpbwa7wx7#
要使用最新版本的Ansible在Docker容器内运行命令:
community.docker
collection:ansible-galaxy collection install community.docker
或者更好的方法是在项目中创建文件
requirements.yml
,其内容为:并运行
ansible-galaxy install -r requirements.yml
(类似于pip install -r requirements.txt
)有关使用集合的详细信息,请单击此处