使用Ansible停止所有现有的Docker容器

古尔伯兰德

我正在创建一个角色来对要托管不同docker容器的VM进行操作系统和配置更新。

在角色开始时,我想停止所有泊坞窗容器(如果有的话)。我在这里找到了该线程输入链接描述,但是它有点旧,所以我尝试打开一个新问题。希望没事。

最简单的方法是这样的:

- name: Stop docker containers
  shell: |
    docker stop $(docker ps -aq)

不幸的是,当主机没有Docker容器时,我得到了一个错误。我认为,使用“ ignore_errors:yes”并不是一个好方法。所以我尝试了这种方式

- name: Get info on docker host and list images
  docker_host_info:
    containers: yes
  register: containers_to_stop

- name: Stop docker containers
  shell: |
    docker stop $(docker ps -aq)
  when: containers_to_stop.containers != 0

但仍与第一部分相同。当主机没有Docker容器时出现错误。

因此,就像在链接的线程中一样,我正在尝试使用“ docker_container”模块,如下所示:

- name: Get info on docker host and list images
  docker_host_info:
    containers: yes
  register: containers_to_stop

- name: Stop running docker containers
  docker_container:
    name: '{{ item.Names }}'
    image: '{{ item.Image }}'
    state: stopped
  loop: '{{ containers_to_stop.containers }}'

不幸的是,“ docker_host_info”模块无法正常工作,因为我所有的docker容器名称都将以“ /”开头。我已经为大家调试过:

failed: [app01] (item={u'Status': u'Up 12 minutes', u'Command': u'./replace_props_and_start.sh', u'Names': [u'/image-name'], u'Created': 1588071879, u'Image': u'image-name', u'Ports': [{u'IP': u'0.0.0.0', u'Type': u'tcp', u'PublicPort': 8091, u'PrivatePort': 80}], u'Id': u'ad5b0b3d6d623e2ac1d0a2ead9fbbf8a5ce5bca58492410a31035fd160de149a'}) => {"ansible_loop_var": "item", "changed": false, "item": {"Command": "./replace_props_and_start.sh", "Created": 1588071879, "Id": "ad5b0b3d6d623e2ac1d0a2ead9fbbf8a5ce5bca58492410a31035fd160de149a", "Image": "image-name", "Names": ["/image-name"], "Ports": [{"IP": "0.0.0.0", "PrivatePort": 80, "PublicPort": 8091, "Type": "tcp"}], "Status": "Up 12 minutes"}, "msg": "Error creating container: 400 Client Error: Bad Request (\"Invalid container name (['/image-name']), only [a-zA-Z0-9][a-zA-Z0-9_.-] are allowed\")"}

因此,在ansible为我创建的目录中,我的容器名为/ image-name,而不是image-name。因此错误很明显,但是我该如何解决?

也许这是一个模块问题,我需要去烦恼的开发人员吗?

谢谢和问候大卫

Zeitounator

以下在我的家用计算机上做得很好。docker_container模块文档中所述,您可以使用短或长id字符串作为标识正在运行的容器nameId大写)是的输出可docker_host_infocontainers列表中。

---
- hosts: localhost
  gather_facts: false

  tasks:
    - name: Get running containers
      docker_host_info:
        containers: yes
      register: docker_info

    - name: Stop running containers
      docker_container:
        name: "{{ item }}"
        state: stopped
      loop: "{{ docker_info.containers | map(attribute='Id') | list }}"

演示运行:

# Show we have no running containers
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

# Spawn some test containers for demo
$ for i in $(seq 1 5); do docker run -d --rm centos:8 bash -c "while true; do sleep 1; done"; done
a492efab9ec7dace786b610f3b93c335fbb84f041f7954557e971a5cbb0905a0
8cd55145c7cb267b37d2af346571797e283cac75777c531caeb88df7ec2e57d6
f009140260f5daee6efc6fba8dd8f73f9c83e31e7f1e09d48681b0738bc86f50
e7af30b1ade41fbc65b3db8e4146497ee736065103af769331d9df4e8e39b131
643e6831b958e0410bb148aeaec29dfeec6fa2773af5fb286ad74ab0368f2e50

# Make sure containers are running
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
643e6831b958        centos:8            "bash -c 'while true…"   9 seconds ago       Up 7 seconds                            quizzical_allen
e7af30b1ade4        centos:8            "bash -c 'while true…"   10 seconds ago      Up 9 seconds                            frosty_khayyam
f009140260f5        centos:8            "bash -c 'while true…"   12 seconds ago      Up 10 seconds                           ecstatic_ramanujan
8cd55145c7cb        centos:8            "bash -c 'while true…"   14 seconds ago      Up 12 seconds                           focused_sammet
a492efab9ec7        centos:8            "bash -c 'while true…"   15 seconds ago      Up 13 seconds                           agitated_jones

# Stop containers with playbook
$ ansible-playbook test.yml 

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Get running containers] *************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Stop running containers] ************************************************************************************************************************************************************************************
changed: [localhost] => (item=643e6831b958e0410bb148aeaec29dfeec6fa2773af5fb286ad74ab0368f2e50)
changed: [localhost] => (item=e7af30b1ade41fbc65b3db8e4146497ee736065103af769331d9df4e8e39b131)
changed: [localhost] => (item=f009140260f5daee6efc6fba8dd8f73f9c83e31e7f1e09d48681b0738bc86f50)
changed: [localhost] => (item=8cd55145c7cb267b37d2af346571797e283cac75777c531caeb88df7ec2e57d6)
changed: [localhost] => (item=a492efab9ec7dace786b610f3b93c335fbb84f041f7954557e971a5cbb0905a0)

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

# Verify containers are stopped
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

# Check that playbook succeeds without containers running
$ ansible-playbook test.yml 

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Get running containers] *************************************************************************************************************************************************************************************
ok: [localhost]

TASK [Stop running containers] ************************************************************************************************************************************************************************************

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将用户现有的.ssh目录挂载到Docker容器中?

来自分类Dev

使用现有的线性编程工具查找所有替代基本解决方案

来自分类Dev

从现有的Docker容器中删除端口绑定

来自分类Dev

Docker:清理所有停止的容器,仅数据容器除外

来自分类Dev

如何停止现有的微调器

来自分类Dev

如何以restart =“ always”模式重新启动现有的Docker容器?

来自分类Dev

当一个容器通过docker-compose停止时如何停止所有容器?

来自分类Dev

所有Docker容器状态?

来自分类Dev

Docker:将新的postgres容器重新连接到现有的Data容器

来自分类Dev

如何在Dockerfile中使用现有的Docker Volume

来自分类Dev

使用Ansible而不是Dockerfile设置Docker容器有什么好处?

来自分类Dev

使用Docker运行现有的Wordpress网站

来自分类Dev

如何通过Azure Cognitive Services为现有的Docker容器创建IoT Edge模块?

来自分类Dev

Linux:在Docker容器中找不到现有的共享库

来自分类Dev

当docker-compose run命令被触发时,是否可以重用现有的已停止容器?

来自分类Dev

与现有Docker容器交互运行

来自分类Dev

如何跟踪现有的ansible项目

来自分类Dev

将容器添加到现有的docker-compose.yml

来自分类Dev

删除所有现有的断点

来自分类Dev

我可以将现有的Docker容器导出到Dockerfile中吗?

来自分类Dev

当一个国家决定停止使用夏令时时,所有现有的应用程序会发生什么变化?

来自分类Dev

UNIX-列出所有现有的串行端口

来自分类Dev

我如何让我所有的Docker容器都使用我的代理?

来自分类Dev

如何停止现有的微调器

来自分类Dev

如何打开现有的LXD容器?

来自分类Dev

如何在现有的Docker容器中永久设置环境变量?

来自分类Dev

打开现有的 nvidia-docker 容器

来自分类Dev

docker service 创建现有容器

来自分类Dev

删除我所有的本地 docker 镜像和容器不起作用

Related 相关文章

  1. 1

    如何将用户现有的.ssh目录挂载到Docker容器中?

  2. 2

    使用现有的线性编程工具查找所有替代基本解决方案

  3. 3

    从现有的Docker容器中删除端口绑定

  4. 4

    Docker:清理所有停止的容器,仅数据容器除外

  5. 5

    如何停止现有的微调器

  6. 6

    如何以restart =“ always”模式重新启动现有的Docker容器?

  7. 7

    当一个容器通过docker-compose停止时如何停止所有容器?

  8. 8

    所有Docker容器状态?

  9. 9

    Docker:将新的postgres容器重新连接到现有的Data容器

  10. 10

    如何在Dockerfile中使用现有的Docker Volume

  11. 11

    使用Ansible而不是Dockerfile设置Docker容器有什么好处?

  12. 12

    使用Docker运行现有的Wordpress网站

  13. 13

    如何通过Azure Cognitive Services为现有的Docker容器创建IoT Edge模块?

  14. 14

    Linux:在Docker容器中找不到现有的共享库

  15. 15

    当docker-compose run命令被触发时,是否可以重用现有的已停止容器?

  16. 16

    与现有Docker容器交互运行

  17. 17

    如何跟踪现有的ansible项目

  18. 18

    将容器添加到现有的docker-compose.yml

  19. 19

    删除所有现有的断点

  20. 20

    我可以将现有的Docker容器导出到Dockerfile中吗?

  21. 21

    当一个国家决定停止使用夏令时时,所有现有的应用程序会发生什么变化?

  22. 22

    UNIX-列出所有现有的串行端口

  23. 23

    我如何让我所有的Docker容器都使用我的代理?

  24. 24

    如何停止现有的微调器

  25. 25

    如何打开现有的LXD容器?

  26. 26

    如何在现有的Docker容器中永久设置环境变量?

  27. 27

    打开现有的 nvidia-docker 容器

  28. 28

    docker service 创建现有容器

  29. 29

    删除我所有的本地 docker 镜像和容器不起作用

热门标签

归档