我想要完成的是在Docker容器中运行已经使用Ansible在Digital Ocean Ubuntu / Docker Droplet上创建的命令。
似乎无法在此找到任何内容,或者我主要缺少某些内容。这是我的剧本中的Ansible任务。我对Ansible很新,所以任何建议或智慧都会受到高度赞赏。
str = cell(1,4); %initialize a cell array to hold the legend strings
for
.
.
.
str{cnt}=sprintf('%f volts',V(cnt)); %insert text into the appropriate cells
end
legend(str)
答案 0 :(得分:33)
在与ansible github project上的一些非常有帮助的开发人员讨论之后,更好的方法就是这样:
- name: add container to inventory
add_host:
name: [container-name]
ansible_connection: docker
changed_when: false
- name: run command in container
delegate_to: [container-name]
raw: bash
如果你的图像中安装了python,你可以使用命令模块或任何其他模块而不是raw。
如果要在远程泊坞主机上执行此操作,请添加:
ansible_docker_extra_args: "-H=tcp://[docker-host]:[api port]"
到add_host块。
有关更完整的示例,请参阅Ansible documentation。
答案 1 :(得分:17)
您应该能够使用docker exec
执行脚本(包含您的命令序列):
<div id="addcontainer">
<div id="addprimary">
<ul>
<li>
<a href="#home">
<img src="https://www.seoclerk.com/pics/183798-18HhJR1392119968.jpg">>
</a>
</li>
</ul>
</div>
<div id="addcontent">
</div>
<div id="addsecondary">
<ul>
<li>
<a href="#home">
<img src="https://www.seoclerk.com/pics/183798-18HhJR1392119968.jpg">
</a>
</li>
</ul>
</div>
</div>
(另见“Why do I have to use bash -l -c
inside my container?”)
docker exec container-name bash -l -c /path/to/script > /path/to/log
。 /path/to/script
是容器内的路径,可以在卷中共享。答案 2 :(得分:6)
您可以使用command module在docker容器中运行命令。例如,此代码将在 my_container 中执行echo "Hello1"
和echo "Hello2"
:
tasks:
- name: Execute commands in docker container
command: docker exec -it my_container bash -c 'echo "Hello1"; echo "Hello2"'
答案 3 :(得分:1)
更新:有一种方法可以在不使用我的模块的情况下执行此操作,请参阅我的其他答案
我编写了一个简单的模块来在远程Docker主机上运行exec。我submitted it to the ansible project,但如果需要,您可以轻松地将其添加到您自己的项目中。该模块只有23行,从我的拉取请求中取出并将其添加到您的./library目录中,然后您可以在您的剧本中添加任务,如下所示:
- name: Run docker exec command
docker_exec:
command: <some command>
docker_host: <docker host>
name: <container name>
register: exec_output
- name: Show exec output
debug: msg="{{ exec_output.result }}"
答案 4 :(得分:1)
自 Ansible 2.10 起,docker_container_exec
是 community.docker
集合的一部分:
- name: Run a simple command (command)
community.docker.docker_container_exec:
container: foo
command: /bin/bash -c "ls -lah"
chdir: /root
register: result
- name: Print stdout
debug:
var: result.stdout
答案 5 :(得分:-1)
最终做了这样的事情:
- name: execute command in docker
shell: |
docker exec container sh -l -c "cat /tmp/secret"
register: hello
- debug: msg="{{ hello.stdout }}"