java - 如何使用 docker 监听微服务上的特定端口
问题描述
我在使用 docker 监听微服务端口时遇到问题。本地一切正常,所以我假设只有正确配置的问题。
所以我开始以这种方式在特定 IP:PORT 上监听 SNMP 消息的微服务:
private static final String UDP = "udp:/";
private static final String SLASH_PREFIX = "/";
private static final String TRAP_IP = "0.0.0.0"; // or container-name
private void prepareTrapConfiguration() throws IOException {
MessageDispatcher dispatcher = getMessageDispatcher();
Address listenAddress = GenericAddress.parse(String.format("%s%s%s%s", UDP, TRAP_IP, SLASH_PREFIX, 162));
log.debug("Starting listening TRAP on: {} ", listenAddress.toString());
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping((UdpAddress) listenAddress);
log.info("Started listening TRAP on: {} ", listenAddress.toString());
Snmp snmp = new Snmp(dispatcher, transport);
prepareSecurity(snmp);
snmp.addCommandResponder(trapReceiverCmd);
snmp.listen();
}
private void prepareSecurity(Snmp snmp) {
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
SecurityProtocols.getInstance().addDefaultProtocols();
SecurityProtocols.getInstance().addPrivacyProtocol(new Priv3DES());
}
我正在通过 docker-compose 启动 docker 映像。Docker 编写如下:
version: '2.1'
services:
snmp:
image: snmp:latest
container_name: snmp
ports:
- "5435:5435"
- "127.0.0.1:162:162/udp"
networks:
- default
restart: always
networks:
default:
driver: bridge
之后,我在端口 162 上建立 IP 隧道。我尝试过使用 SNMP 容器的确切 IP,以及使用 putty 的 localhost IP。
最后,我在 127.0.0.1:162 本地发送消息,但没有任何反应 - 它没有在容器上收到。通过 Wireshark,我收到了无法接近的端口
提前感谢您的提示
解决方案
如果您的主机是 Windows,请尝试在 linux 上收听host.docker.internal
-172.17.0.1
推荐阅读
- node.js - 在 MAC 上本地运行计时器触发 azure 函数(在 docker 内)
- html - 带有 CSS 的产品表
- botframework - 在 bot 中加载特定于语言的响应文件
- javascript - Error rendering item from state array in React
- pandas - 大熊猫中的过滤器计数
- c# - Threadpool线程什么时候返回线程池
- java - uuidExtra 为 null 如何将其转换为字符串
- sql-server - Pyspark 连接到 Microsoft SQL 服务器?
- ios - SwiftUI 自定义相机视图?
- unix - UNIX - 跨 ssh 测试文件并在原始主机上返回 True