如何解决我想在Docker-Swarm中将2个容器彼此连接
我想将两个容器相互连接...我从创建覆盖网络mynet
开始:
docker network create -d overlay mynet
之后,我创建了第一个服务activemq
:
docker service create --name activemq -p 61616:61616 -p 8161:8161 --replicas 1 --network mynet rmohr/activemq
这开始并且工作得很好,我也可以访问WebUI http:// localhost:8161 / admin /
现在我要启动服务TimeService,在容器中进行以下设置:
docker service create --name timeservice -p 7000:7000 --replicas 1 --network mynet ni920/timeserviceplain:latest
java.naming.provider.url=tcp://localhost:61616
java.naming.user=admin
java.naming.password=admin
io.jexxa.rest.host=0.0.0.0
io.jexxa.rest.port=7000
因此它应通过tcp://localhost:61616
与ActiveMQ
连接,但不能。
你们有什么头绪,我应该尝试在没有Swarm
的环境中或在Kubernetes-Pod
的环境中正常工作的通信方式吗?
解决方法
如果您希望容器彼此通信,可以使用它们的名称,然后让网络驱动程序解析其ips。
这是来自docker docs的network driver summary:
- 用户定义的桥接网络是最佳的选择,当您需要多个容器在同一Docker主机上进行通信时。
- 主机网络是最好的,它不应该将网络堆栈与Docker主机隔离,但是您希望将容器的其他方面隔离。
当您需要运行在不同Docker主机上的容器进行通信时,或者当多个应用程序使用集群服务一起工作时,- 覆盖网络是最佳选择。
- Macvlan网络是从VM设置迁移或需要容器看起来像网络上的物理主机(每个都有唯一的MAC地址)的最佳选择。
- 第三方网络插件,可用于将Docker与专用网络堆栈集成。
在您的情况下,将 localhost 替换为服务名称 activemq 。
java.naming.provider.url=tcp://activemq:61616
.
.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。