MAC中的Docker网络

时间:2017-12-18 23:11:02

标签: docker

我在同一个网络中有2个docker容器。 我通过以下方式创建了一个网络:

docker network create my_network 

我正在使用以下网络运行Landoop容器:

docker run --rm -it -p 2181:2181 -p 3030:3030 -p 8081:8081 -p 8082:8082 
 -p 9092:9092 --net=my_network --name localkafka landoop/fast-data-dev

我正在运行另一个容器:

docker run -it --rm --net=my_network --name containerB 
containerName.

当我在 containerB 内登录并尝试ping localkafka 使用:

container ping -c 5 localkafka

成功了。 但是当我做的时候

ping -c 5 localkafka:8081
ping: unknown host

我在这里缺少什么?任何帮助表示赞赏。

PS:我正在使用MAC,我必须在另一个容器B中使用由1个容器暴露的端口。

2 个答案:

答案 0 :(得分:2)

您的问题是您滥用ping。

阅读本文:https://technet.microsoft.com/en-us/library/cc732509(v=ws.10).aspx

简短回答 - ping通过ICMP回应请求工作。您无法ping端口,因为端口是TCP等传输层协议中的概念。因此,localkafka:8080被视为具有该名称的主机,而不是主机:端口对。

您可以改为使用nmap,也可以通过传输层协议查找行为类似ping的第三方应用程序。

答案 1 :(得分:0)

如果您使用的是mac,则可能安装了netcat(nc)。 Netcat可用于测试端口是否打开:

nc -zw2 localkafka 8081 &>/dev/null && echo open || echo closed

-z选项使netcat连接无需传输数据。如果无法建立连接,则-w选项告诉netcat在2秒后超时。

如果netcat不可用,可以直接使用/dev/tcp来测试端口是否打开:

{ echo > /dev/tcp/localkafka/8081; } > /dev/null 2>&1 && echo open || echo closed