CTFd异常关闭时Whale插件的幽灵容器问题处理

CTFd异常关闭时Whale插件的幽灵容器问题处理

IShirai_KurokoI

CTFd-Whale通过数据库来记录存在哪些容器和服务,以便进行开启和关闭,但如果承载CTFd的服务器或者平台出现故障异常重启,或平台异常关闭,有可能导致记录丢失,容器和服务变身无主容器。
有人可能就想问了,我直接 docker ps 然后 docker stop,之后docker rm不就移除了吗?
错误的捏,我们通过研究Whale的代码可以发现,他是通过以下代码来创建容器的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
client.services.create(
image=container.challenge.docker_image,
name=f'{container.user_id}-{container.uuid}',
env={'FLAG': container.flag}, dns_config=docker.types.DNSConfig(nameservers=dns),
networks=[get_config("whale:docker_auto_connect_network", "ctfd_frp_containers")],
resources=docker.types.Resources(
mem_limit=DockerUtils.convert_readable_text(
container.challenge.memory_limit),
cpu_limit=int(container.challenge.cpu_limit * 1e9)
),
labels={
'whale_id': f'{container.user_id}-{container.uuid}'
}, # for container deletion
constraints=['node.labels.name==' + node],
endpoint_spec=docker.types.EndpointSpec(mode='dnsrr', ports={})
)

也就是说,他创建了服务,然后服务再创建了容器,如果不消灭服务,那么就算你重启服务器,这个默认模式为replicated的服务也会不断给你创建容器,让你永远无法达到杀死容器的目的。

解决办法就是移除服务,举例如下

幽灵容器处理办法

找到他创建的服务,直接rm掉服务,就可以解决问题了。

妈妈再也不用担心产生无主容器啦。

PS:我们Scr1w战队二次开发的CTFd整合版地址:https://github.com/dlut-sss/CTFD-Public

  • 标题: CTFd异常关闭时Whale插件的幽灵容器问题处理
  • 作者: IShirai_KurokoI
  • 创建于 : 2023-06-29 00:00:00
  • 更新于 : 2023-12-24 16:33:59
  • 链接: https://ishiraikurokoi.top/2023-06-29-CTFd-Ghost-Container/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
CTFd异常关闭时Whale插件的幽灵容器问题处理