我有三个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
任何帮助表示赞赏.
--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-curl
、jessie
.