如何使用主机UDP端口连接两个Docker容器

时间:2019-03-28 01:51:18

标签: docker

我正在运行两个容器。两个容器都希望侦听主机的UDP端口。我正在通过UDP端口1234从主机获取数据,并且我想运行两个将通过UDP端口监听主机的容器。我认为两个进程可以侦听相同的UDP端口。

我创建了两个容器ffmpeg1和ffmpeg2。

先运行:

docker run --rm -p 1234:1234/udp -it ffmpeg
docker run --rm -p 1234:5000/udp -it ffmpeg2

尝试运行第二个容器时出现以下错误。

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

4 个答案:

答案 0 :(得分:0)

您必须切换端口,因为第一个端口定义了本地接口,第二个端口定义了容器端口。

docker run --rm -p 1235:5000/udp -it ffmpeg2

答案 1 :(得分:0)

您不能在一个主机上侦听相同的UDP端口。 因此,在第二个容器中,让我们使用另一个端口,例如:1235

$ docker network create ffmpeg

或在一台主机中。您可以通过创建网络直接从容器调用
1)创建新的网络:

$ docker run --rm --name=ffmpeg --net=ffmpeg -it ffmpeg $ docker run --rm --name=ffmpeg2 --net=ffmpeg -it ffmpeg

2)将容器连接到网络

ul { 
  padding: 0;
  background-color: #DEDEDE; // only to demonstrate left list edge
}
    
ul>li { list-style: none; }

3)现在,您可以直接通过容器名称ffmpeg,ffmpeg2调用容器

答案 2 :(得分:0)

如果主机上有多个网卡,则可以绑定到主机上的不同IP。

答案 3 :(得分:0)

1)如果数据正在广播UDP,并且绑定到不同的ip:same_port,则可以将不同的ip签名到同一网卡。 2)在主机上使用端口复制方法,即端口1234-> 1235