使用netcat在docker中实现两个容器之间的通信

6

我希望能够在Docker中通信两个容器,我使用netcat进行测试。首先我创建了Dockerfile:

FROM ubuntu
WORKDIR /root
RUN apt-get update && apt-get install netcat iputils-ping -y

使用以下代码添加图像:

docker build . -t ubuntu_netcat

我已经创建了一个新网络:

docker network create --driver bridge nettest

接着我运行了两个容器:

docker run --net=nettest --expose=8080 -it --name pc1 ubuntu_netcat
docker run --net=nettest --link=pc1 -it --name pc2 ubuntu_netcat

首先,在容器(pc1)上使用netcat命令监听8080端口:

nc -vlk 8080

我希望从第二个容器(pc2)与IT技术相关内容进行沟通:

nc -v pc1 8080

但是我收到了“连接被拒绝”的错误提示:

root@c592b2015439:~# nc -v pc1 8080
pc1.nettest [172.18.0.2] 8080 (?) : Connection refused

我一直在查看Docker文档,但似乎所有内容都是正确的。实际上,我可以成功地在容器之间执行ping命令,因此它们可以相互到达,但我的端口设置可能有误。 我做错了什么?
谢谢。

Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。 - jww
这个帮助我解决了一个docker network问题,将两个Docker容器链接在一起。你是参考了某篇博客来得到这个例子的,还是自己想出来的呢? - ximiki
1个回答

18

看起来Ubuntu上这个版本的netcat不能像通常那样进行监听。您必须为端口指定-p选项(即使选项似乎以端口作为位置选项出现)。

您的netcat监听器命令应该是:

nc -vlkp 8080

你说得对!我一直以为是Docker配置问题,但实际上问题出在netcat版本上。谢谢! - Eidansoft
通过使用netcat-openbsd来避免这个问题和其他类似的问题。 - Kunal Tyagi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接