Docker 容器应急

容器网络简单理解

容器拥有n多张veth网卡与一张docker0网卡

在这里插入图片描述

docker 五种网络

  • bridge
    默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
  • host
    容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。
  • none
    获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。
  • container
    与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。
  • 自定义网络
    与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名容器之间网络通信。

默认都为bridge网卡
在这里插入图片描述

容器内为什么能通baidu
容器内虚拟网卡网卡——》容器网关(宿主机虚拟网卡)——》docker0网卡——》物理网卡

在这里插入图片描述

两种情况

我做了一个实验,发现两种情况
第一种情况,容器会走vet网卡在到docker0网卡,所以在两张网卡上都能抓到对应的数据包。

在这里插入图片描述

在这里插入图片描述

第二种情况,在docker0网卡上抓不到流量,只能在对应的veth网卡上才能抓到流量
在这里插入图片描述
我发现docker0上并不能抓到容器的流量
在这里插入图片描述
在使用traceroute查看路由后,我发现,容器在出网关后到了192.168.68.2,该ip为物理机物理网卡网关,意思是,该容器,从容器虚拟网关出来后直接到了物理机网关,跳过了docker0网卡,所以使用tcpdump -i docker0抓取该容器流量是抓不到的
在这里插入图片描述
在这里插入图片描述
为什么会出现这总问题,在查看iptables规则时,我发现,在docker创建时可能会添加一些规则

iptables -t nat -S

在这里插入图片描述

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

这条规则的意思是如果docker0收到来自172.17.0.0/16这个网段的外出包,docker0会交给MASQUERADE处理,而MASQUERADE处理方式是将包源地址替换成host地址发出
在这里插入图片描述
所以,跳过docker0网卡直接到物理网卡的原因是iptables规则中有该网卡直接nat出去的规则

基础信息收集

基础信息

观察其状态,映射端口

docker container ls
docker ps

在这里插入图片描述

详细信息

检查容器详细信息,挂载的数据卷,运行时间,mac地址等信息

docker inspect ID

在这里插入图片描述

资源使用

检查容器资源使用情况

docker stats ID

在这里插入图片描述

进程信息

容器进程信息

docker top ID

在这里插入图片描述

文件

容器文件信息

docker diff ID | grep A
# A -add
# D -delete
# C -change

在这里插入图片描述

应急处置

  1. 构建镜像,保留证据
  2. 检查异常
  3. 暂停容器内进程
  4. 断开容器网络

构建镜像

docker commit -m="说明" ID check08:1.0

在这里插入图片描述
暂停容器中的进程,包括后台,守护进程等,文件系统运行状态不变

docker pause ID # 暂停
docker unpause ID # 恢复

在这里插入图片描述

定位容器

容器通过docker0网卡进行通信,可以通过tcpdump指定网卡找到异常网络连接,然后进一步关联容器。
情况一:ids或其他安全设备告警,某台linux上出现了恶意连接,该linux主机上部署了多个容器,该如何排查是那个容器出现了问题?

在宿主机上通过netstat -an 是看不到容器内的网络连接的,而一台台进入容器查看网络连接,排查效率很慢,而且很多容器没有安装net-tools工具,没有netstat工具。

抓取流量

情况一:直接通过docker0网卡进行tcpdump流量抓取,通过安全设备给出的IP地址定位容器。
情况二:docker0网卡无法抓取到,只能一个一个网卡进行排查。

抓取docker0网卡流量

tcpdump -i docker0 dst host xx.xx.xx.xx -v -w docker.pcap

抓取容器对应的veth流量

iptables -t nat -S # 查看对应网卡

在这里插入图片描述

tcpdump -i br-28b6e6930d36 dst host 172.29.246.156 -v -w br-28b6e6930d36.pcap
tcpdump -i br-28b6e6930d36 dst host 172.29.246.156 -v

定位容器

利用docker inspect -f匹配模块文件匹配对应容器

docker inspect -f '{{.Name}}{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) | grep 172.19.0.2

docker container ls -a | grep 82-pte-lamp-1

开源容器扫描器

https://github.com/chaitin/veinmind-tools

在这里插入图片描述

### 更改Docker容器映射端口号的配置方法 在实际操作中,如果需要更改已经运行中的 Docker 容器的端口映射,可以通过以下方式实现。需要注意的是,这些方法通常涉及停止并重新启动 Docker 服务以及手动编辑相关配置文件。 #### 方法一:通过修改 `hostconfig.json` 文件 此方法适用于 Linux 系统下的 Docker 安装环境。以下是具体的操作流程: 1. 查找目标容器 ID 使用命令 `docker ps -a` 列出所有容器,并记录下需要修改的容器 ID 或名称[^2]。 2. 停止 Docker 服务 执行命令 `systemctl stop docker` 来暂停 Docker 服务,以便安全地修改配置文件[^4]。 3. 编辑 `hostconfig.json` 文件 转到 `/var/lib/docker/containers/<container_id>/` 目录,其中 `<container_id>` 是上一步查找到的目标容器 ID。打开该目录下的 `hostconfig.json` 文件,定位至 `"PortBindings"` 字段,按照所需更新端口映射关系。例如: ```json { "PortBindings": { "80/tcp": [ { "HostIp": "", "HostPort": "8080" } ] } } ``` 将上述字段中的 HostPort 更新为目标主机端口号。 4. 启动 Docker 服务 修改完成后执行 `systemctl start docker` 恢复 Docker 服务正常工作状态。 5. 重启容器 对应容器需被删除后再创建以应用新的端口设置,或者直接移除旧实例再基于相同镜像构建新实例来加载最新改动后的参数设定。 #### 方法二:调整 `config.v2.json` 中暴露端口部分 另一种可行方案是直接作用于容器元数据存储位置内的 JSON 数据结构——即位于同一路径下的另一个重要文档 `config.v2.json` 上面提到过的 `"ExposedPorts"` 属性节点处增加额外条目即可完成新增加外部访问权限的功能定义过程[^3]: ```json { ... "Config": { ..., "ExposedPorts": { "80/tcp": {}, "9090/tcp": {} }, ... } } ``` 在此基础上重复之前关于停启守护进程和服务的动作序列之后记得再次确认最终效果是否达到预期水平! --- ### 注意事项 - **备份原始文件**:在任何情况下都建议先复制一份原版作为应急恢复手段以防万一发生意外状况影响业务连续性; - **兼容性验证**:某些特定版本之间可能存在细微差异因此务必参照官方手册核实细节信息确保适配当前所使用的发行版本号范围之内; - **自动化工具替代手工干预**:考虑到效率与稳定性因素长远来看推荐利用脚本程序批量处理此类任务减少人为失误概率提升整体运维质量标准。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_abcdef

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值