docker 中的应用程序 运行 无法与 elasticsearch docker 连接
Application running in docker can't connect with elasticsearch docker
我是 docker 的新手,有一个连接到 elasticsearch 的简单 DW(dropwizard) 应用程序,它已经 运行 在 docker 中使用 docker -compose.yml,内容如下
Docker-compose.yml for elasticsearch
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
container_name: elasticsearch
environment:
- xpack.security.enabled=false
- discovery.type=single-node
ports:
- 8200:9200
- 8300:9300
volumes:
elasticsearch-data:
driver: local
注意:我在主机(本地 mac 系统)上将 8200 和 8300 作为 ES 端口公开
现在,当我只是 运行 我的 DW 应用程序连接到本地主机上 8200 中的 ES 时一切正常,但现在我正在尝试 docker 化我的 DW 应用程序并且面临一些问题。
下面是我的 DockerDW 应用文件
COPY target/my.jar my.jar
COPY config.yml config.yml
ENTRYPOINT ["java" , "-jar" , "my.jar", "server", "config.yml"]
当我 运行 我上面的 DW docker 图像时,它立即停止,使用 docker logs <my-container-id>
,它抛出以下异常:
*java.io.IOException: elasticsearch: Name does not resolve*
org.elasticsearch.client.IndicesClient.exists(IndicesClient.java:827)
**Caused by: java.net.UnknownHostException: elasticsearch: Name does not resolve**
我尝试过的东西
- 错误消息清楚地提到我的 DW 应用程序 docker 实例无法连接到 elasticsearch,我已验证 运行ning 正常。
还检查了 Elaticsearch docker 的网络,它的网络别名是 elasticsearch
,如下所示,n/w 是 docker-files_default
。
"Aliases": [
"elasticsearch",
"de78c684ae60"
],
检查了我的 DW 应用 docker 实例的 n/w,它使用 bridge
网络并且没有任何网络别名。
现在,如何让我的应用程序 docker 和 elasticsearch docker 使用相同的网络,以便它们可以相互连接,我想这会解决问题?
解决此问题的两种方法:首先是检查 docker-compose 为您的 elasticsearch 设置创建的网络 (docker network ls
),然后 运行 您的 DW 应用
docker run --network=<name of network> ...
第二种方法是创建网络 docker network create elastic
并在 docker 撰写文件以及 docker 运行 命令中将其用作外部网络DW 应用
Docker 组合文件看起来像
...
services:
elasticsearch:
networks:
elastic:
...
networks:
elastic:
external: true
我是 docker 的新手,有一个连接到 elasticsearch 的简单 DW(dropwizard) 应用程序,它已经 运行 在 docker 中使用 docker -compose.yml,内容如下
Docker-compose.yml for elasticsearch
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.0
container_name: elasticsearch
environment:
- xpack.security.enabled=false
- discovery.type=single-node
ports:
- 8200:9200
- 8300:9300
volumes:
elasticsearch-data:
driver: local
注意:我在主机(本地 mac 系统)上将 8200 和 8300 作为 ES 端口公开
现在,当我只是 运行 我的 DW 应用程序连接到本地主机上 8200 中的 ES 时一切正常,但现在我正在尝试 docker 化我的 DW 应用程序并且面临一些问题。
下面是我的 DockerDW 应用文件
COPY target/my.jar my.jar
COPY config.yml config.yml
ENTRYPOINT ["java" , "-jar" , "my.jar", "server", "config.yml"]
当我 运行 我上面的 DW docker 图像时,它立即停止,使用 docker logs <my-container-id>
,它抛出以下异常:
*java.io.IOException: elasticsearch: Name does not resolve*
org.elasticsearch.client.IndicesClient.exists(IndicesClient.java:827)
**Caused by: java.net.UnknownHostException: elasticsearch: Name does not resolve**
我尝试过的东西
- 错误消息清楚地提到我的 DW 应用程序 docker 实例无法连接到 elasticsearch,我已验证 运行ning 正常。
还检查了 Elaticsearch docker 的网络,它的网络别名是
elasticsearch
,如下所示,n/w 是docker-files_default
。"Aliases": [ "elasticsearch", "de78c684ae60" ],
检查了我的 DW 应用 docker 实例的 n/w,它使用
bridge
网络并且没有任何网络别名。
现在,如何让我的应用程序 docker 和 elasticsearch docker 使用相同的网络,以便它们可以相互连接,我想这会解决问题?
解决此问题的两种方法:首先是检查 docker-compose 为您的 elasticsearch 设置创建的网络 (docker network ls
),然后 运行 您的 DW 应用
docker run --network=<name of network> ...
第二种方法是创建网络 docker network create elastic
并在 docker 撰写文件以及 docker 运行 命令中将其用作外部网络DW 应用
Docker 组合文件看起来像
...
services:
elasticsearch:
networks:
elastic:
...
networks:
elastic:
external: true