我正在运行两个容器。两个容器都希望侦听主机的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
答案 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