我开发了一个基于 Ubuntu 的 docker 在公司内供同事使用. 我怎么才能知道有多少 container 正在运行, 宿主 IP, 并且可以 ssh 到目标 container 来远程管理? 能在公司内局域网实现就可以. 谢谢
1
enki0423 2023-06-17 07:00:13 +08:00 via iPhone
如果你说的是你的同事们在自己的工作电脑上运行 container ,那么是很难实现你的需求的。
你需要的可能是一个 k8s 集群,每个开发按需使用。 |
2
ltkun 2023-06-17 07:00:16 +08:00 via Android
gui 的管理工具吗 随便用用就 portainer 吧
|
3
Riesling OP |
4
ltkun 2023-06-17 07:23:58 +08:00 via Android
那就 docker 命令行解决啊 是管理员啥都能干
|
5
liantian 2023-06-17 07:57:18 +08:00
我做过一个类似的事情....
我们信息安全处要求开发环境也全都有杀毒、HIDS 、审计等.... 解决方法是用 Red Hat Universal Base Image 8 Init 简写 ubi8/ubi-init 的基础容器,装好对应的软件和权限设置后,做为开发环境的 base ,如果你还想登陆进去,那就装个 openssh 罢了... |
6
ktblack 2023-06-17 08:15:22 +08:00 via Android
所有电脑加入 docker swarm ,然后 swarm 模式部署一个 portainer ,这样是否可行
|
7
gux928 2023-06-17 08:42:31 +08:00 via iPhone
你在下个版本的 image 中实现一个脚本,定时发消息,你这接收。
|
8
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 就好了; |
9
happyn 2023-06-17 09:27:55 +08:00
上面方法的优点:
1. 可扩展性强,不论有多少容器,只要启动的时候加上这个参数,就无缝记录这个容器所有日志 2. fluentd 后端可以输出到 ES ,文件, syslog ;各种折腾都可以 3. 不用改 image 4. 只要部署一次,以后基本上就不用维护了 5. 没啥依赖,fluentd 也是个容器,启动就完了; 缺点: 1. 还是有点部署的工作量的 2. 所有容器启动都得带那个参数才行 |
10
happyn 2023-06-17 09:29:38 +08:00
不过您这个 ssh 登录容器,估计是不行的;而且把 docker 容器开启 ssh 也很奇怪;
|
11
Magentaize 2023-06-17 09:32:22 +08:00
在同事电脑里用 docker 跑一个 portainer agent
|
13
anubu 2023-06-17 11:47:57 +08:00
- 上报宿主 IP 。可以通过日志或者内置 crontab 定时 curl 一个地址,分析访问日志
- 远程登录容器。首先,要有远程登录服务,如镜像中安装 ssh server 。其次,要解决网络问题。容器不向宿主映射 ssh 端口的话,你是登录不了的。一般会考虑容器主动向服务端发起连接,如 ssh 的反向代理隧道。也可以考虑 mesh 网络一类的自组网络,比如镜像内置 tailscale 。 以上都是自己手搓的话一些可能的方向,整体上是要实现一个远程控制管理的服务端和客户端。条件允许的话,现成的 swarm+portainer 应该更合适。 |
14
dann73580 2023-06-17 14:54:39 +08:00
不怕恶心的话你甚至可以继承个哪吒探针在 docker 里,我看有人这么做了🌝🌝
|
15
lovelylain 2023-06-17 16:58:32 +08:00 via Android 1
意思就是想在 image 里埋个后门程序,什么后门程序合适?
|
16
louisxxx 2023-06-17 17:07:11 +08:00
直接给你所有同事电脑装个飞鸽子吧
|
17
louisxxx 2023-06-17 17:08:32 +08:00
直接给你所有同事电脑装个灰鸽子
|
18
kgcHQbTYyvcz2w3j 2023-06-17 18:29:25 +08:00
docker context
|
19
hicdn 2023-06-17 20:34:59 +08:00 via Android
下一步就分布式挖矿了?
|
20
amlee 2023-06-17 21:24:29 +08:00
我怎么感觉这问题,这需求这么奇怪呢。楼上还一本正经回答?
|
21
xbleey 2023-06-17 23:47:35 +08:00 via iPhone
放开 10250 端口用 socket 不行了吗
|
22
Riesling OP |
23
yinmin 2023-06-18 15:53:36 +08:00
你的电脑要是用固定 IP 地址,你在你的电脑的 Docker 上安装 portainer ,然后 Environments - Add environment - Docker Standalone - Edge Agent Standard 配置你的电脑 IP 和客户端名称,portainer 会生成一个 docker run 的容器安装命令,你在你同事的机器运行这条 docker run 命令安装客户端,之后你能在自己的 portainer 上管理所有人的 docker 了。
|
24
fox0001 2023-06-18 20:07:34 +08:00 via Android
如果只是获取各个电脑上的 Docker 容器的运行情况,不用 ssh 进去的话,可以考虑系统监控的那一套。比如 Prometheus 、InfluxDB 、Zabbix 等方案。
比如 InfluxDB 的话,可以在“镜像”装上 telegraf ,找个大家都可以访问的电脑部署 influxdb 。所有 docker 容器都运行 telegraf ,抓取运行数据,并发送到 influxdb 。然后可以使用 influxdb 的图表,或者装个 Grafana ,展示各个 Docker 容器的运行情况。 Zabbix 是个整体解决方案,应该更容易部署和管理。 Prometheus 跟 InfluxDB 类似,但采用拉数据的形式。就是各个容器暴露个端口,Prometheus 定时去访问并抓取数据。数据展示就是使用 Grafana 。据说这个更适合管理一堆容器。但我没玩过。 如果各个容器都跑了 ssh 服务,可以使用 next-terminal 这样的管理系统。可以显示是否在运行、一键 ssh 进去等,更多的状态不知道能否获取。其项目: https://github.com/dushixiang/next-terminal |