【问题标题】:Run a shell command inside a running Docker container using Ansible使用 Ansible 在正在运行的 Docker 容器中运行 shell 命令
【发布时间】:2016-07-18 09:32:16
【问题描述】:

我想执行 shell 命令,例如:使用 Ansible 在正在运行的 docker 容器中执行“wget”命令。这是我要执行的剧本

---

- name: Enter into a running container and run a command
  docker_container:
    name: centos_conatainer
    state: started
    image: centos
    command: wget https://downloadlink.com

这会停止容器并且它也不会下载文件。这是使用 docker_container 模块执行 shell 命令的正确方法,还是有其他使用 Ansible 的方法?

【问题讨论】:

  • 这是不好的做法,也不是使用 Docker 的好方法。您可能应该重新考虑如何使用 Docker 或使用 VM。也就是说,迈克尔回答了你的问题。
  • Re: duplicate, this answer from the other question 描述了使用 Ansible 2.0 中引入的 docker 连接和 raw 来解决相同问题的另一种方法此处未涉及的模块

标签: docker ansible ansible-playbook


【解决方案1】:

您正在寻找与 docker exec 命令行等效的 Ansible。

ansible docker_container 中的

Command 相当于 docker run 命令行中的 command 选项。

这个新的 Ansible 模块似乎不支持这个。你只需要使用通用的 Ansible 命令。

例子:

- name: Enter into a running container and run a command
  command: docker exec centos_container wget https://downloadlink.com

【讨论】:

  • 小改动,我用这个命令docker exec -i "{{ container_name}}" /bin/bash -c 'command to execute '
  • 现在有 --connection=docker 选项可以做到这一点。您仍然需要在 docker 容器中使用 python。如果你不能,你仍然可以使用raw module,但那会走下坡路……小心处理。
【解决方案2】:

AFAIK 你无法使用docker_container 模块来做到这一点——它用于使用指定的命令启动一个新容器。

我使用这段代码在容器内执行命令:

- name: Execute command inside a container
  shell: "docker exec {{ containerName }} {{ commandToRun }}"

【讨论】:

    【解决方案3】:

    现在,您可以通过 Ansible 社区集合来实现这一点。要安装它,请运行:

    ansible-galaxy collection install community.docker
    

    如果你成功安装了这个集合,你可以创建以下任务:

    - name: Execute command inside a container
      community.docker.docker_container_exec:
        container: "{{ container_name }}"
        command: /bin/bash -c "echo Hello world"
    

    这相当于:

    docker exec -i "{{ container_name }}" /bin/bash -c "echo Hello world"
    

    【讨论】:

      【解决方案4】:

      Entrypoint 或 CMD 可以完成这项工作:

      https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/

      【讨论】:

      • 感谢您的回复。但我想使用“ansible_docker”模块而不是 Dockerfile
      猜你喜欢
      • 1970-01-01
      • 2013-12-09
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      相关资源
      最近更新 更多