Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker容器中的SocketIO客户端_Docker_Networking_Socket.io - Fatal编程技术网

Docker容器中的SocketIO客户端

Docker容器中的SocketIO客户端,docker,networking,socket.io,Docker,Networking,Socket.io,在Docker容器中运行的SocketIO客户端未连接到服务器(而不是Docker) 没有Docker,客户机运行良好。但是从Docker,客户端无法连接到服务器。 如果在与服务器相同的计算机上以主机网络模式运行客户端容器,并连接到地址0.0.0.0,则连接将正常工作。但这只适用于所有内容都在同一实例上的情况,我需要另一个解决方案。 我尝试了一些暴露端口的操作,但没有效果 服务器代码: const http = require("http"); const express = require("

在Docker容器中运行的SocketIO客户端未连接到服务器(而不是Docker)

没有Docker,客户机运行良好。但是从Docker,客户端无法连接到服务器。 如果在与服务器相同的计算机上以主机网络模式运行客户端容器,并连接到地址0.0.0.0,则连接将正常工作。但这只适用于所有内容都在同一实例上的情况,我需要另一个解决方案。 我尝试了一些暴露端口的操作,但没有效果

服务器代码:

const http = require("http");
const express = require("express");
const socketIO = require("socket.io");
const app = express();
const server = http.Server(app);
const io = socketIO(server);
io.on("connection", function(socket) {
    console.log("Wow! Client socket connected!");
});
server.listen(8081, "0.0.0.0", function() {
    console.log("Starting server on port 8081");
});
应在Docker中运行的客户端代码:

let serverAddress = "address-of-the-server:8081";
const socketIOClient = require("socket.io-client");
const socket = socketIOClient(serverAddress);

我做错了什么,为什么客户端不能连接到服务器?容器是否需要任何特殊端口?

我想问题是服务器的
地址。当然,请按如下方式启动容器:

docker run ... --network=host <image_name>
docker运行--网络=主机

使用
localhost
而不是
服务器的地址

你现在一定已经找到了什么,但是对于任何登陆这里的人来说。。。我也面临着同样的问题,尽管我两边都有羽毛(feathers vuex)。与您的设置一样,客户端和服务器端位于单独的docker中,只要我在运行docker的同一系统上运行浏览器,并且浏览器指向localhost,它们就可以一起正常工作。但我无法从其他系统浏览。我的头撞在墙上的时间最长,试图弄清楚如何在运行时从主机向浏览器中的客户端获取环境变量或其他内容,但在Web上找不到任何东西。最后,我意识到,用户在浏览器的地址栏中键入了主机系统IP地址!我可以从location.href提取它!在我的例子中,我们使用的是IP地址,但我想如果您使用的是URL,类似的东西也会起作用。希望这对其他人有所帮助。

您可以包含
docker run
命令或
docker compose.yml
文件吗?你想在容器中运行这两个部分吗?在同一个系统或单独的系统上?@DavidMaze,我使用标准的
docker run image name
。我试图暴露端口,但没有帮助。在同一个系统上没有问题,无论我是否在容器中运行,我都可以通过
--network=host
进行连接。但是当它应该在不同的系统中时,我会迷路。。。我想也许我需要一个定制的Docker网络?你能解决这个问题吗?我也有同样的问题,谢谢所有我知道的最好的评论,它是有效的。但是我需要在服务器实例外部运行容器。因此,我正在寻找另一种选择。