我有三个码头集装箱,
- java容器(JC):用于我的java应用程序(spring boot)
- elasticsearch 容器 (EC):用于 ElasticSearch
- 测试容器 (TC):测试容器以通过 ping 测试进行故障排除
目前,JC 无法通过“名称”看到 EC。当我说“看到”时,我的意思是如果我在 JC 上对 EC 执行 ping 操作,我会得到一个ping: unknown host
. 有趣的是,如果我在 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: unknown host
使用 TC,因为我已经在 shell 中,所以我可以只做一个ping -c 2 EC
,我得到 2 个回复。
我认为这可能与我的 Java 应用程序有关,但我对此表示怀疑,因为我修改了我Dockerfile
的只是为了站起来容器。Dockerfile
如下所示。
FROM java:8
VOLUME /tmp
请注意,您可以通过docker build -no-cache -t myapp-image .
.
另请注意,我安装了 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 容器而java 容器不能?
更多信息。
- 虚拟盒子 5.0.10
- 码头工人 1.9.1
- 编织 1.4.0
- CentOS 7.1.1503
- 在部署到 AWS 之前,我在 Windows 10 桌面上的 CentOS VM 中运行 docker 作为暂存环境
任何帮助表示赞赏。