【发布时间】:2016-06-05 04:49:11
【问题描述】:
我创建了一个监听 MQTT 代理的微服务(使用 scala 和 Akka)。作为使用 paho mqttv3 库的 MQTT 库。
该服务在本地运行时按预期工作,但在将其打包到 docker 容器中后,它只会在 --interactive (-i) 模式下正常运行。否则,MQTT代理连接成功后,将收不到任何消息。
这是一个问题,因为像 docker-compose 这样的工具不能正确支持 --interactive 标志。
因此,我的问题是: --interactive (-i) 模式对我的 docker 容器的网络配置有何影响?可以通过不同的方式达到这种效果吗?
编辑:
目前,要启动我的 docker 容器,我运行以下命令:
docker run -i --name mqttlistener --net=test_net mqtt-listener:0.3
然后容器将按预期工作(它连接到 MQTT 代理并随后接收消息)。
没有-i 的相同命令也将启动应用程序,客户端将连接到 MQTT 代理:
[INFO] [02/23/2016 13:34:19.219] [main] [Remoting] Starting remoting
[INFO] [02/23/2016 13:34:19.347] [main] [Remoting] Remoting started; listening on addresses :[akka.tcp://My-Service@mqttlistener:2555]
[INFO] [02/23/2016 13:34:19.349] [main] [Remoting] Remoting now listens on addresses: [akka.tcp://My-Service@mqttlistener:2555]
connecting to mqtt broker: ssl://my.brokers.url:8883
connected
但是没有消息会到达。
我验证了进程是以ps aux启动的,它会按预期打印正在运行的进程:
daemon 24574 2.7 0.7 7756248 119608 ? Ssl 14:12 0:02 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -cp /opt/docker/lib/mqttlistener
simon 25729 0.1 0.1 242704 28156 pts/3 Sl+ 14:34 0:00 docker run --name mqttlistener --net=test_net
docker ps 看起来也正常:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b474f0c954dd mqtt-listener:0.3 "bin/mqttlistener" 16 minutes ago Up 16 minutes 2555/tcp mqttlistener
-p 8883 或 -p 8883:8883 也不会改变这种行为
EDIT2:
docker events 在容器启动时打印:
2016-02-23T15:40:58.664173393+01:00 container create 5c3a7b9b54106735fd2c0c4e7cfd5b6edc210539230a130c2afd9b1b822dad52 (image=mqtt-listener:0.3, name=mqttlistener)
2016-02-23T15:40:58.665446821+01:00 container attach 5c3a7b9b54106735fd2c0c4e7cfd5b6edc210539230a130c2afd9b1b822dad52 (image=mqtt-listener:0.3, name=mqttlistener)
2016-02-23T15:40:59.054709073+01:00 network connect fa703609c50c1a670a450f7d3e2633494fb09bdbdf1a03833344d8af48ad52bb (type=bridge, container=5c3a7b9b54106735fd2c0c4e7cfd5b6edc210539230a130c2afd9b1b822dad52, name=test_net)
2016-02-23T15:40:59.056399012+01:00 container start 5c3a7b9b54106735fd2c0c4e7cfd5b6edc210539230a130c2afd9b1b822dad52 (name=mqttlistener, image=mqtt-listener:0.3)
docker logs mqttlistener 打印输出,验证应用程序已启动并且与 mqtt 代理的连接已建立:
[INFO] [02/23/2016 14:43:27.081] [main] [Remoting] Starting remoting
[INFO] [02/23/2016 14:43:27.211] [main] [Remoting] Remoting started; listening on addresses :[akka.tcp://My-Service@mqttlistener:2555]
[INFO] [02/23/2016 14:43:27.214] [main] [Remoting] Remoting now listens on addresses: [akka.tcp://My-Service@mqttlistener:2555]
connecting to mqtt broker: ssl://my.broker.url:8883
connected
当使用-i 运行容器时,日志会在该输出下方打印received: {"sp": {"mi": ...-messages,这会验证 mqtt 侦听器是否在交互模式下工作。
【问题讨论】:
标签: networking docker mqtt