同一Docker网络下某容器退出后,如何自动停止指定其他关联容器?
实现方案推荐
下面提供3种无需在Python容器内安装完整Docker环境的实现方式,按实现成本从低到高排序:
方案1:Python脚本直接调用Selenium自带的关闭接口(最推荐)
Selenium Server默认提供了远程关闭的API,不需要任何Docker相关的依赖,仅需要在你现有的Python脚本末尾追加代码即可实现需求:
- 在所有初始化逻辑执行完成后,向Selenium服务的关闭接口发送POST请求:
import requests # 这里的selenium替换为你docker-compose中Selenium服务的服务名 requests.post("http://selenium:4444/wd/hub/shutdown")
请求发送成功后Selenium容器会自动终止,仅保留WordPress容器运行。
方案2:使用外部Shell启动脚本控制流程
如果不想修改现有Python代码,可以通过调整启动流程实现,完全不需要改动容器内部逻辑:
- 新建
start.sh启动脚本,内容如下:
#!/bin/bash # 后台启动WordPress和Selenium服务 docker-compose up -d wordpress selenium # 运行一次性Python容器执行初始化脚本,执行完成后自动删除容器 docker-compose run --rm python # 脚本执行完成后停止Selenium服务 docker-compose stop selenium
- 给脚本添加执行权限:
chmod +x start.sh - 后续直接执行
./start.sh即可实现预期流程。
方案3:挂载Docker套接字调用容器API
如果后续还有其他容器控制需求,可以选择挂载宿主机Docker套接字的方式,不需要在容器内安装完整Docker:
- 在
docker-compose.yml的Python服务配置中添加挂载配置:
services: python: # 其他原有配置保留 volumes: - /var/run/docker.sock:/var/run/docker.sock
- 在Python容器的依赖中添加Docker SDK:
pip install docker - 在Python脚本末尾添加停止Selenium容器的逻辑:
import docker client = docker.from_env() # 这里的selenium替换为你docker-compose中Selenium服务的服务名 client.containers.get("selenium").stop()
内容的提问来源于stack exchange,提问作者Navjot Singh
相关产品推荐
相关产品推荐

