首页 > 解决方案 > 如何使用 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,我收到了无法接近的端口

提前感谢您的提示

标签: javadockerweb-servicessnmpputty

解决方案


如果您的主机是 Windows,请尝试在 linux 上收听host.docker.internal-172.17.0.1


推荐阅读