使docker容器按名称相互查看(ping)时出现问题

前端之家收集整理的这篇文章主要介绍了使docker容器按名称相互查看(ping)时出现问题 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有三个Docker容器,

> Java容器(JC):用于我的Java应用程序(春季启动)
> elasticsearch容器(EC):用于ElasticSearch
>测试容器(TC):测试容器以ping测试进行故障排除

当前,JC无法通过“名称”看到EC.当我说“ see”时,我的意思是如果我对JC进行一次ping到EC的操作,则会得到ping:未知主机.有趣的是,如果我对TC向EC进行ping操作,则会收到响应.

这是我启动容器的方法.

> docker run -dit –name JC myapp-image
> docker run -d –name EC elasticsearch:1.5.2 elasticsearch -Des.cluster.name = es
> docker run –rm –name TC -it busyBox:latest

然后,要从JC ping EC,我发出以下命令.

docker exec JC ping -c 2 EC

我得到ping:未知主机

使用TC,因为我已经在shell上,所以我可以执行ping -c 2 EC并得到2条回复.

我以为这可能与我的Java应用程序有关,但是我对此表示怀疑,因为我修改了Dockerfile使其仅位于容器中. Dockerfile如下所示.

FROM java:8
VOLUME /tmp

请注意,您可以通过docker build -no-cache -t myapp-image创建上述docker镜像.

还要注意,我已经安装了Docker Weave Net,这似乎并没有帮助JC按名称查看EC.另一方面,我尝试按以下方式找到每个容器的IP地址.

> docker inspect -f'{{.NetworkSettings.IPAddress}}’JC-> 172.17.0.4
> docker inspect -f'{{.NetworkSettings.IPAddress}}’EC-> 172.17.0.2
> docker inspect -f'{{.NetworkSettings.IPAddress}}’TC-> 172.17.0.3

我当然可以通过IP地址从JC ping EC:docker exec JC ping -c 2 172.17.0.2.但是让容器通过IP地址互相查看并没有帮助,因为我的Java应用程序需要引用主机名作为其配置的一部分.

有什么想法吗?它是容器映像本身吗?为什么busyBox容器映像能够按名称ping到ElasticSearch容器,但不能ping通Java容器?

一些更多的信息.

> VirtualBox 5.0.10
> Docker 1.9.1
>编织1.4.0
> CentOS 7.1.1503
>在部署到AWS之前,我正在Windows 10桌面上的CentOS VM内作为过渡环境运行docker

任何帮助表示赞赏.

最佳答案
在同一docker守护程序中,使用old --link option来更新每个组件的/ etc / hosts并确保一个组件可以ping另一个组件:

docker run -d --name EC elasticsearch:1.5.2 elasticsearch -Des.cluster.name=es
docker run -dit --name JC --link ED myapp-image
docker run --rm --name TC -it busyBox:latest

然后,一个docker exec JC ping -c 2 EC应该可以工作.

如果不是,请检查是否不是由于基本映像和安全性问题造成的:请参阅“ Addressing Problems with Ping in Containers on Atomic Hosts”.
JC基于docker/_java:8,其本身基于jessie-curljessie.

猜你在找的Docker相关文章