如何远程管理运行中的 docker container?

2023-06-17 06:53:17 +08:00
 Riesling

我开发了一个基于 Ubuntu 的 docker 在公司内供同事使用. 我怎么才能知道有多少 container 正在运行, 宿主 IP, 并且可以 ssh 到目标 container 来远程管理? 能在公司内局域网实现就可以. 谢谢

2354 次点击
所在节点    问与答
24 条回复
enki0423
2023-06-17 07:00:13 +08:00
如果你说的是你的同事们在自己的工作电脑上运行 container ,那么是很难实现你的需求的。

你需要的可能是一个 k8s 集群,每个开发按需使用。
ltkun
2023-06-17 07:00:16 +08:00
gui 的管理工具吗 随便用用就 portainer 吧
Riesling
2023-06-17 07:19:28 +08:00
@enki0423 是他们自己的电脑. 我希望每个运行的 container 都能向我报告运行信息, 并且允许我 ssh 登录管理. k8s 集群什么的太高大上了, 我原以为在 docker image 里面添加一个后台运行的自动启动脚本就行了呢
@ltkun 不用 GUI, 不怕简陋, 实现功能就好. 我甚至想我发个什么指令, 然后所有运行中的 container 都给我发个 email 都行. 如果开放 ssh 太难了那我就人工顺着 IP 摸过去. 关键是 container 是后台运行的, 同事也不知道谁的在跑
ltkun
2023-06-17 07:23:58 +08:00
那就 docker 命令行解决啊 是管理员啥都能干
liantian
2023-06-17 07:57:18 +08:00
我做过一个类似的事情....

我们信息安全处要求开发环境也全都有杀毒、HIDS 、审计等....

解决方法是用 Red Hat Universal Base Image 8 Init 简写 ubi8/ubi-init 的基础容器,装好对应的软件和权限设置后,做为开发环境的 base ,如果你还想登陆进去,那就装个 openssh 罢了...
ktblack
2023-06-17 08:15:22 +08:00
所有电脑加入 docker swarm ,然后 swarm 模式部署一个 portainer ,这样是否可行
gux928
2023-06-17 08:42:31 +08:00
你在下个版本的 image 中实现一个脚本,定时发消息,你这接收。
happyn
2023-06-17 09:18:08 +08:00
可以部署一个公共的 fluentd ,接收 log 转发到一个后端,可以存为文件什么的;

比如部署了一个 fluentd 服务器: 10.x.x.x:24224

然后要求每个 docker 容器运行的时候,把 log 发送到这个 fluentd 服务器;

docker run ..... --log-driver=fluentd --log-opt fluentd-address=10.x.x.x:24224


之后写个小脚本每天分析一下 log 就好了;
happyn
2023-06-17 09:27:55 +08:00
上面方法的优点:

1. 可扩展性强,不论有多少容器,只要启动的时候加上这个参数,就无缝记录这个容器所有日志
2. fluentd 后端可以输出到 ES ,文件, syslog ;各种折腾都可以
3. 不用改 image
4. 只要部署一次,以后基本上就不用维护了
5. 没啥依赖,fluentd 也是个容器,启动就完了;

缺点:
1. 还是有点部署的工作量的
2. 所有容器启动都得带那个参数才行
happyn
2023-06-17 09:29:38 +08:00
不过您这个 ssh 登录容器,估计是不行的;而且把 docker 容器开启 ssh 也很奇怪;
Magentaize
2023-06-17 09:32:22 +08:00
在同事电脑里用 docker 跑一个 portainer agent
Riesling
2023-06-17 10:43:48 +08:00
@gux928 对对,这种怎么实现呢?最基本的能定时汇报宿主 IP 就行
anubu
2023-06-17 11:47:57 +08:00
- 上报宿主 IP 。可以通过日志或者内置 crontab 定时 curl 一个地址,分析访问日志
- 远程登录容器。首先,要有远程登录服务,如镜像中安装 ssh server 。其次,要解决网络问题。容器不向宿主映射 ssh 端口的话,你是登录不了的。一般会考虑容器主动向服务端发起连接,如 ssh 的反向代理隧道。也可以考虑 mesh 网络一类的自组网络,比如镜像内置 tailscale 。
以上都是自己手搓的话一些可能的方向,整体上是要实现一个远程控制管理的服务端和客户端。条件允许的话,现成的 swarm+portainer 应该更合适。
dann73580
2023-06-17 14:54:39 +08:00
不怕恶心的话你甚至可以继承个哪吒探针在 docker 里,我看有人这么做了🌝🌝
lovelylain
2023-06-17 16:58:32 +08:00
意思就是想在 image 里埋个后门程序,什么后门程序合适?
louisxxx
2023-06-17 17:07:11 +08:00
直接给你所有同事电脑装个飞鸽子吧
louisxxx
2023-06-17 17:08:32 +08:00
直接给你所有同事电脑装个灰鸽子
kgcHQbTYyvcz2w3j
2023-06-17 18:29:25 +08:00
docker context
hicdn
2023-06-17 20:34:59 +08:00
下一步就分布式挖矿了?
amlee
2023-06-17 21:24:29 +08:00
我怎么感觉这问题,这需求这么奇怪呢。楼上还一本正经回答?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/949450

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX