如何在两个 Docker 容器之间创建 websocket 连接

How to create websocket connection between two Docker containers

我有两个 Docker 容器,需要在两者之间建立 websocket 连接。

我运行一个这样的容器:

docker run --name comm -p 8080:8080 comm_module:latest

将端口 8080 暴露给主机。然后我尝试 运行 像这样的第二个容器:

docker run --name test -p 8080:8080 datalogger:latest

但是,我收到以下错误:

docker: Error response from daemon: driver failed programming external connectivity on endpoint test (f06588ee059e2c4be981e3676d7e05b374b42a8491f9f45be27da55248189556): Bind for 0.0.0.0:8080 failed: port is already allocated. ERRO[0000] error waiting for container: context canceled

我不知道该怎么做。我应该将它们连接到网络吗?我如何 运行 这些容器?

您不能同时绑定同一个主机端口两次您可以更改一个容器上的端口之一:

 docker run --name comm -p 8080:8080 comm_module:latest
 docker run --name test -p 8081:8080 datalogger:latest

您可以检查容器中关于它们如何通信的配置。

您还可以在它们之间创建 link:

docker run --name test -p 8081:8080 --link comm datalogger:latest

我终于搞定了。这些是两个 Docker 容器之间的 two-way websocket 通信所涉及的步骤:

  1. 修改容器中的源代码,使用其他容器的名称作为目的主机地址+端口号(如comm:port_no inside test,反之亦然).

  2. 在两个容器的Docker文件中公开相同的端口(8080)并构建镜像。无需发布它们,因为它们对网络上的其他容器可见。

  3. 像这样创建一个 user-defined 桥接网络:

    docker network create my-net

  4. 创建我的第一个容器并将其附加到网络:

    docker create --name comm --network my-net comm_module:latest

  5. 创建我的第二个容器并将其附加到网络:

    docker create --name test --network my-net datalogger:latest

  6. 通过发出 docker 启动命令启动两个容器。

并且 two-way websocket 通信工作得很好!

我的解决方案工作正常。

docker network create mynet  
docker run -p 443:443 --net=mynet --ip=172.18.0.3 --hostname=frontend.foobar.com foobarfrontend
docker run -p 9999:9999 --net=mynet --ip=172.18.0.2 --hostname=backend.foobar.com foobarbackend

route /P add 172.18.0.0 MASK 255.255.0.0 10.0.75.2

foobarfrontend 在端口 9999 的 foobarbackend 上调用一个 wss websocket PS:我在 docker windows 10 上使用 linuxcontainers 玩得开心