如何在两个 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 通信所涉及的步骤:
修改容器中的源代码,使用其他容器的名称作为目的主机地址+端口号(如comm:port_no
inside test
,反之亦然).
在两个容器的Docker文件中公开相同的端口(8080)并构建镜像。无需发布它们,因为它们对网络上的其他容器可见。
像这样创建一个 user-defined 桥接网络:
docker network create my-net
创建我的第一个容器并将其附加到网络:
docker create --name comm --network my-net comm_module:latest
创建我的第二个容器并将其附加到网络:
docker create --name test --network my-net datalogger:latest
通过发出 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
玩得开心
我有两个 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 通信所涉及的步骤:
修改容器中的源代码,使用其他容器的名称作为目的主机地址+端口号(如
comm:port_no
insidetest
,反之亦然).在两个容器的Docker文件中公开相同的端口(8080)并构建镜像。无需发布它们,因为它们对网络上的其他容器可见。
像这样创建一个 user-defined 桥接网络:
docker network create my-net
创建我的第一个容器并将其附加到网络:
docker create --name comm --network my-net comm_module:latest
创建我的第二个容器并将其附加到网络:
docker create --name test --network my-net datalogger:latest
通过发出 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 玩得开心