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

时间:2019-07-04 08:19:42

标签: docker docker-networking

我有两个Docker容器,它们之间需要通过websocket连接。

我这样运行一个容器:

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

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

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

但是,我收到以下错误:

  

docker:来自守护程序的错误响应:驱动程序外部编程失败   端点测试的连通性   (f06588ee059e2c4be981e3676d7e05b374b42a8491f9f45be27da55248189556):   绑定0.0.0.0:8080失败:端口已分配。错误[0000]   等待容器时出错:上下文已取消

我不确定该怎么办。我应该将这些连接到网络吗?如何运行这些容器?

3 个答案:

答案 0 :(得分:2)

您不能在同一时间两次绑定同一主机端口,而可以在一个容器上更改其中一个端口:

COPY tablename FROM PROGRAM 
     'cat /Users/local/Downloads/ufl_old_files/*'  WITH DELIMITER AS ';'  csv header

您可以检查容器中有关其通信方式的配置。

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

<span th:if="${myString!='&lt;p&gt;&lt;/p&gt;'} ">

答案 1 :(得分:0)

我终于解决了。这些是在两个Docker容器之间进行双向Websocket通信所涉及的步骤:

  1. 修改容器中的源代码,以将另一个容器的名称用作目标主机地址(“ test”中的“ comm”,反之亦然)+端口号。

  2. 在两个容器的Dockerfile中暴露相同的端口(8080)并构建映像。无需发布它们,因为它们将对网络上的其他容器可见。

  3. 创建用户定义的桥接网络,如下所示:

    docker网络创建我的网络

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

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

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

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

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

双向websocket通讯很好用!

答案 2 :(得分:0)

我的解决方案工作正常。

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:我使用linuxcontainers在docker Windows 10上工作 玩得开心