我正在运行一个用于snmptrapd的Docker容器。它可以在Linux主机(Ubuntu 18.04)上正常运行,但不能在Windows(10 Pro)上运行。
Dockerfile:
FROM alpine:3.8 RUN apk --no-cache add net-snmp COPY mibs/ /usr/share/snmp/mibs COPY snmptrapd.conf /etc/snmp/snmptrapd.conf COPY snmp.conf /etc/snmp/snmp.conf EXPOSE 162/udp ENTRYPOINT ["snmptrapd","-L","o","-f"]
我们还在Docker run命令中转发UDP端口162:
docker run -d --rm -p 162:162/udp snmp_server
从Windows主机内部发出的模拟SNMP陷阱可以正确到达容器。 但是,任何来自Windows主机外部的陷阱都不会到达容器。
这不是Windows防火墙问题,因为可以按预期在Windows主机上运行Wireshark并看到陷阱到达,目标端口UDP 162。
启动容器后,Windows上的netstat显示绑定到所有接口的UDP端口162上有一个侦听器:
netstat -ano | findstr 162 UDP 0.0.0.0:162 *:* 13952 UDP [::]:162 *:* 13952
在容器内部,netstat显示在UDP端口162上有一个侦听器,该侦听器绑定到所有接口。
Proto Recv-Q Send-Q Local Address Foreign Address State udp 0 0 0.0.0.0:snmptrap 0.0.0.0:*
Docker版本19.03.1,内部版本74b1e89
我试过了:
--network = host而不是默认的桥接模式;
- 特权
--cap-add NET_BROADCAST
在这个阶段抓稻草!