gpt4 book ai didi

docker - 打开从 docker 容器到另一个容器的 WebSocket 连接(能够在 cli 中 ping 容器,但不能通过 ws)

转载 作者:行者123 更新时间:2023-12-01 03:21:31 28 4
gpt4 key购买 nike

我正在使用 docker-compose 运行 2 个容器,1 个用于运行 react 应用程序,另一个用于运行 rabbitmq 服务器。

version: '2'
services:
node.app.local:
build:
context: ./node
container_name: app-node
hostname: node.app
domainname: local
tty: true
volumes:
- "${SOURCES_PATH}/app:/var/www/app"
ports:
- 8091:8091
expose:
- 8091
links:
- rabbitmq.app.local
working_dir: "/var/www/app"

rabbitmq.app.local:
image: rabbitmq:3.6.10
container_name: app-rabbitmq
hostname: rabbitmq.app
domainname: local
tty: true
expose:
- 5672
- 15672
- 15674

我知道我的节点容器和我的 rabbitmq 服务器之间的链接运行良好,因为我可以从我的节点容器 ping 服务器:
$ docker exec -it app-node bash
$ ping rabbitmq.app.local

64 bytes from 172.18.0.12: icmp_seq=0 ttl=64 time=0.099 ms

64 bytes from 172.18.0.12: icmp_seq=1 ttl=64 time=0.098 ms

64 bytes from 172.18.0.12: icmp_seq=2 ttl=64 time=0.069 ms

64 bytes from 172.18.0.12: icmp_seq=3 ttl=64 time=0.088 ms



在我的 js 应用程序中,如果我打开与服务器 IP 的连接(由 ping 公开的 172.18.0.12),它运行良好:
const ws = new WebSocket('ws://172.18.0.12:15674/ws');
//connected to server RabbitMQ/3.6.10

但是,如果我尝试使用容器名称:
const ws = new WebSocket('ws://rabbitmq.app.local:15674/ws');

VM7698:35 WebSocket connection to 'ws://rabbitmq.app.local:15674/ws' failed: Error in connection establishment: net::ERR_NAME_NOT_RESOLVED



有谁知道为什么我可以在 CLI 中 ping 服务器但无法通过 ws 协议(protocol)访问它?

最佳答案

在一个容器中使用 PHP 连接到另一个容器中的 websocket 服务时,我遇到了同样的问题。

我做了一些研究,发现 docker compose v2 使用 user-defined networks ,它引入了嵌入式 DNS 服务器,取代了默认桥接网络中容器内的传统 DNS。

The embedded DNS server maintains the mapping between all of the container aliases and its IP address on a specific user-defined network.



根据 docker 官方文档,它是如何工作的。但似乎在尝试对容器别名或链接进行 DNS 解析时出现了一些问题, jake-low 表示。 ,docker-compose 的贡献者。

所以,这个问题的另一种解决方案是先通过主机名获取IP,然后使用解析的IP连接到websocket服务。这就是我解决问题的方法。

关于docker - 打开从 docker 容器到另一个容器的 WebSocket 连接(能够在 cli 中 ping 容器,但不能通过 ws),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44760641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com