使用Ansible在Docker Container中运行命令

我试图完成的是在一个Docker容器内运行命令,该容器已经在使用Ansible的Digital Ocean Ubuntu / Docker Droplet上创build。

似乎无法find任何东西,或者我主要失去了一些东西。 这是我在剧本里的Ansible任务。 我对Ansible很新,所以任何build议或智慧将不胜感激。

- 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 

你应该可以用docker exec执行一个脚本(用你的命令序列):

 docker exec container-name bash -l -c /path/to/script > /path/to/log 

(另请参阅“ 为什么必须在容器中使用bash -l -c ? ”)

  • /path/to/script应该可以被Ansible进程访问。
  • /path/to/log是容器内的path,可以在卷中共享。

在与一些非常有用的开发人员讨论了可靠的github项目之后 ,更好的方法是这样的:

 - 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,则可以使用命令模块或其他任何模块而不是原始模块。

如果你想在一个远程的docker主机上做这个,添加:

 ansible_docker_extra_args: "-H=tcp://[docker-host]:[api port]" 

到add_host块。

有关更完整的示例,请参阅Ansible文档 。

您可以使用命令模块在echo "Hello1"容器中运行命令。例如,此代码将在echo "Hello1"执行echo "Hello1"echo "Hello2"

  tasks: - name: Execute commands in docker container command: docker exec -it my_container bash -c 'echo "Hello1"; echo "Hello2"' 

更新:有没有办法做到这一点,而不使用我的模块,看到我的其他答案

我写了一个简单的模块在远程Docker主机上运行exec。 我已经把它提交给了一个可靠的项目 ,但是如果你需要的话,你可以很容易地把它添加到你自己的项目中。 该模块只有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 }}"