我正在尝试创建一个 ansible-playbook ,它可以停止在特定端口上运行的 docker 容器。
从我在网上找到的内容来看,我们似乎可以使用
获取所有容器 tasks:
- name: Get running containers
docker_host_info:
containers: yes
register: docker_info
并停止容器使用
- name: Stop running containers
docker_container:
name: "<container on port 8080>"
state: stopped
但是如何停止在端口 8080 上运行的容器
如果其他人偶然发现了这个问题,这就是我的做法
tasks:
- name: Get docker Info
docker_host_info:
containers: yes
register: docker_info
- name: Stop the container running on port 8080
docker_container:
name: "{{ docker_info | dict2items | json_query('[?key==`containers`].value[] | [?Ports[?PublicPort==`8080`]] | [0].Id') }}"
state: stopped
我坚持使用 killport 软件包,只需运行
killport 80
命令之类的命令,它将停止任何将此端口暴露给 host 的容器(不是在某些 docker 网络内部)。