我使用 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
,但还是不行
我解决了我的问题。 SNMP 陷阱使用 UDP 协议。对于 Docker,默认情况下仅在 TCP 中打开端口,解决方案是在 docker-compose.yaml:
中声明端口ports:
- "162:162/udp"
陷阱是,即使我在我的dockerfile中设置了UDP,它对我来说也不起作用:
EXPOSE 162/udp