在我的IDE中,我能够利用一个弹出启动应用程序,该应用程序会向外部kafka代理生成消息(使用Kafkaproducer)。但是一旦我在docker容器中托管了我的spring-boot应用程序,我的应用程序就不能再提交给代理了。 以下是错误消息:
o.s.k.support.LoggingProducerListener: Exception thrown when sending a message with key='null' and payload='....' to topic Category:
org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
org.springframework.kafka.core.KafkaProducerException:
Failed to send; nested exception is org.apache.kafka.common.errors.TimeoutException: Failed to update metadata after 60000 ms.
我以前用来运行docker的是:docker run -p 9001:9001 -d image_name
其中9001是我的spring-boot端口,我能够发布到端口,只是一旦我的消息被发布,它就不会到达外部经纪人。
我想我的一般概念是Docker容器生活在孤立的土地上,你必须打开/映射端口才能访问它(比如我的-p 9002:9002),但它是否以同样的方式访问容器?如果是这样,有人可以告诉我如何运行docker容器以便能够访问外部代理(假设代理URL是“192.168.1.1:9000”)?我不认为我现在可以修改代理上的任何内容,但我的假设是,如果我可以通过我的IDE访问,为什么不在docker中?谢谢你的帮助!
答案 0 :(得分:1)
这是由于我的ip-forwarding = 0,一旦打开,我就可以进行传出请求。