当前位置: 首页 > 知识库问答 >
问题:

在docker中运行的应用程序无法与elasticsearch docker连接

何禄
2023-03-14

我是新来的docker和有一个简单的DW(dropwizard)应用程序连接到elasticsearch,其中已经运行在docker使用docker-compose.yml,其中有以下内容。

弹性搜索的Docker-compose.yml

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

注意:我将8200和8300公开为主机(本地mac系统)上的ES端口

现在,当我在本地主机上运行连接到8200中ES的DW应用程序时,一切都正常了,但现在我正在尝试对DW应用程序进行dockerize,并且面临一些问题。

下面是我的DW应用程序Dockerfile

COPY target/my.jar my.jar
COPY config.yml config.yml
ENTRYPOINT ["java" , "-jar" , "my.jar", "server", "config.yml"]

当我运行上面的DW docker映像时,它会立即停止,使用docker日志

*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,我验证运行正常。
  • 还检查了Elatic search docker的网络,它的网络别名为elasticsearch,如下所示,n/w为docker-files_default

    “别名”:[“elasticsearch”,“de78c684ae60”],

    检查了我的DW应用docker实例的n/w,它使用bridge网络,并且没有任何网络别名。

    现在,我如何使我的应用程序docker和elasticsearch docker使用相同的网络,以便它们可以相互连接,我想这将解决这个问题?


  • 共有1个答案

    司寇星海
    2023-03-14

    解决此问题的两种方法:首先是检查为elasticsearch设置创建的网络docker compose(docker network ls),然后使用运行DW应用程序

    docker运行--网络=

    第二种方法是创建网络docker network create elastic,并将其用作docker compose文件以及DW应用程序的docker run命令中的外部网络。

    Docker compose文件可能看起来像

    ...
    services:
      elasticsearch:
         networks:
           elastic:
    ...
    networks:
        elastic:
            external: true
    

     类似资料:
    • 问题内容: 我正在尝试运行此项目-https://github.com/JumboInteractiveLimited/codetest 我已经下载了Docker工具箱,并执行了GitHub页面上提到的build和run命令,但是当我尝试访问http:localhost:8080时,该页面仍然不可用。 当我尝试再次执行运行时,Docker说 编辑 :澄清一下,我只有在第二次运行时才收到该错误。当我

    • 问题内容: 我创建了一个Dockerfile在Docker内部运行Docker: 启动容器并运行docker ps后,我得到:“无法通过unix:///var/run/docker.sock连接到Docker守护程序。Docker守护程序正在运行吗?” 我在容器内执行了命令dockerd: 错误启动守护程序:错误初始化网络控制器:错误获取控制器实例:无法创建NAT链DOCKER:iptables失

    • 我在docker compose yml文件中为广告侦听器配置了以下配置 警告O.apache.kafka.clients.networkclient-获取相关id为1的元数据时出错:{foo=leader_not_available} 主机可以从我的机器ping,因为它都在同一个网络中,没有防火墙问题。在docker容器中使用命令时,可以看到相同的主机名。我是不是漏掉了什么?

    • application.properties:这是spring mvc应用程序,应用程序使用带有两个数据库的MySQL db 我阅读了创建dockerfile和docker-compose文件的文章https://medium.com/@asce4s/dockerize-spring-mvc-application-a9ffbd11eadb https://github.com/abagayev/

    • 我有一个akka-http应用程序,在本地工作得很好,我有一些问题“dockerizing”应用程序。我通过Dockerfile构建docker映像,并使用docker-entrypoint执行java-jar命令。当我第一次访问正在运行的docker容器时,应用程序并没有运行,但是如果我访问容器并手动执行java-jar命令,应用程序就会启动良好。如果我执行以下命令(在容器内),应用程序也会正常

    • 我试着运行一个简单的Scala片段, 在安装了Scala的IntelliJ IDE中。然而,“Run”按钮似乎是灰色的,我在上下文菜单中也看不到它(在下面的屏幕抓取中没有显示)。 根据无法使用Intellij IDEA运行Java代码的答案,代码位于标记为蓝色的文件夹中。(我也尝试将其标记为“测试”文件夹,但无济于事)。我错过了什么?