Docker 问题:SNMP 侦听器仅在从 docker 部署时才起作用:权限被拒绝

问题描述 投票:0回答:1

我使用 Snmp4j 用 Java 开发了一个 SNMP 监听器。该服务工作没有任何问题,因此我制作了 Dockerfile 和 docker-compose.yaml,但是当我从 Docker 部署该服务时,出现错误:

Exception Message = Permission denied

正常情况下应该只是等待并监听陷阱,看来我问他的地方他不被允许听。 我对 Docker 不太熟悉,而且我不明白我的配置有什么问题。 有关信息,我的 SNMP 侦听器在其端口 162 上侦听来自 docker 外部服务器的陷阱。

您知道当从 Docker 运行某些东西时,什么会影响网络的授权吗?

这是我的 Dockerfile,我尝试手动公开端口,但它没有解决我的问题:

FROM registry.access.redhat.com/ubi8/openjdk-17:1.14

ENV LANGUAGE='en_US:en'

COPY --chown=185 target/*-runner.jar /deployments/connecteur-telephonie.jar

EXPOSE 162/udp
EXPOSE 162/tcp
EXPOSE 8080
USER 185
ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/connecteur-telephonie.jar"

这是 Docker 组合中与我的服务相关的部分。因为我想听外面的声音,所以我使用de network_mode“主机”,对吗?

version: '3.9'
 services:
connecteur-telephonie:
    image: <url from where i get my image Docker>
    environment:
      - SERVER_ADRESS=192.168.1.30
      - SERVER_PORT=162
      - QUARKUS_ARTEMIS_URL=tcp://10.205.11.115:61616
      - QUARKUS_ARTEMIS_USERNAME=root
      - QUARKUS_ARTEMIS_PASSWORD=root
    network_mode: "host"`

非常感谢您的时间和考虑。

我尝试手动公开 Dockerfile 中的端口,但它没有解决我的问题。 我也试着听

0.0.0.0/162
,但还是不行

java docker docker-compose snmp snmp4j
1个回答
0
投票

我解决了我的问题。 SNMP 陷阱使用 UDP 协议。对于 Docker,默认情况下仅在 TCP 中打开端口,解决方案是在 docker-compose.yaml:

中声明端口
ports:
  - "162:162/udp"

陷阱是,即使我在我的dockerfile中设置了UDP,它对我来说也不起作用:

EXPOSE 162/udp
© www.soinside.com 2019 - 2024. All rights reserved.