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

Docker容器无法使用容器名称访问另一个容器

邹普松
2023-03-14

我有两个Docker容器在同一个网络中运行,我希望其中一个通过spring Webclient调用另一个。我确信他们都在同一个网络中-

“finishConnect(…)失败:连接被拒绝:附件加载程序秒/172.21.0.5:80;嵌套异常为io。内蒂。频道AbstractChannel$AnnotatedConnect异常:finishConnect(…)失败:连接被拒绝:附件加载程序秒/172.21.0.5:80“

附件加载器prim和附件加载器sec都可以通过邮递员单独访问,都可以发送响应,没有问题。这是我的docker compose:

    version: '3'
services:
  attachment-loader-prim:
    container_name: attachment-loader-prim
    build:
      context: ""
    restart: always
    image: attachment-loader:latest
    environment:
      SERVER_PORT: 8085
    networks:
      - loader_network
    expose:
      - 8085
    ports:
      - 8005:8005
      - 8085:8085

  attachment-loader-sec:
    container_name: attachment-loader-sec
    build:
      context: ""
    restart: always
    image: attachment-loader:latest
    environment:
      SERVER_PORT: 8086
    networks:
      - loader_network
    expose:
      - 8086
    ports:
      - 8006:8005
      - 8086:8086

networks:
  loader_network:
    driver: bridge

这是一个网络客户端,可以拨打电话:

    class RemoteServiceCaller(private val fetcherWebClientBuilder: WebClient.Builder) {

suspend fun getAttachmentsFromRemote(id: String, params: List<Param>, username: String): Result? {

    val client = fetcherWebClientBuilder.build()

    val awaitExchange = client.post()
            .uri("/{id}/attachment", id)
            .contentType(MediaType.APPLICATION_JSON)
            .bodyValue(params)
            .header(usernameHeader, username)
            .accept(MediaType.APPLICATION_OCTET_STREAM)
            .awaitExchange {
                if (it.statusCode().is2xxSuccessful) {
                    handleSucessCode(it)
                } else it.createExceptionAndAwait().run {
                    LOG.error(this.responseBodyAsString, this)
                    throw ProcessingException(this)
                }
            }

    return awaitExchange
}

private suspend fun handleSucessCode(response: ClientResponse) {
// some not important logic
}
}

P、 S.BasicUri用于定义为类似配置Bean的Webclient<代码>http://attachment-loader-sec/list

我所有的调查都带给我这样的问题:

  • 使用localhost而不是容器名称调用容器
  • 容器不在同一个网络中。

所有这些似乎都与我无关。

任何想法都将受到真正的赞赏。

共有1个答案

邢和光
2023-03-14

问题在于调用没有端口的服务。url现在变成了<代码>http://attachment-loader-sec:8086/list现在它是正确的。在我的例子中,我得到404,这意味着我的url路径不太正确,但这超出了当前问题的范围

 类似资料:
  • 问题内容: 我基于两个不同的图像创建了两个docker容器。一个数据库,另一个用于网络服务器。这两个容器都在我的Mac OS X上运行。 我可以从主机访问数据库容器,也可以从主机访问Web服务器。 但是,如何从Web服务器访问数据库连接? 我启动数据库容器的方式是 我开始了wls容器作为 我可以通过连接到主机上的数据库 我可以以以下方式访问主机上的wls: 问题答案: 最简单的方法是使用–link

  • 我基于两个不同的映像创建了两个docker容器。一个是db,另一个是WebServer。这两个容器都在我的mac OSX上运行。 我可以从主机访问db容器,也可以从主机访问webserver。 我可以访问主机上的wls作为

  • 问题内容: 我正在尝试为将我的应用程序容器连接到postgres容器提供一个便携式解决方案。“便携式”是指我可以给用户两个命令,每个容器一个,它们将始终协同工作。 我的本地PC上运行着一个postgres docker容器,我这样运行它, 我可以使用address从python flask应用程序访问它。 我也将python应用程序也放置在docker容器中,但无法连接到postgres容器。 地

  • 问题内容: 我正在开发服务,并在那里使用docker compose来旋转诸如postgres,redis,elasticsearch之类的服务。我有一个基于RubyOnRails的Web应用程序,并从所有这些服务中进行读写操作。 这是我的 我可以在此网络中ping容器 到目前为止,一切都很好。现在我想在主机上的Rails应用程序上运行ruby,但是能够像目前这样使用url访问postgres实例

  • 我正在尝试从另一个码头工人容器连接到 kafka docker 容器。但它没有连接。 为了运行kafka和zookeeper,我使用了docker compose文件: 容器docker compose 17138956372294708100 _ kafkatest . producer _ 1和docker compose 17138956372294708100 _ kafkatest .

  • 我正在尝试以下操作: 在一个带有暴露端口的容器中旋转MySQL 5.5,例如4200。 在一个带有暴露端口的容器中旋转MySQL 5.7,例如4300。 旋转golang容器以运行我的应用程序。 我的想法是我需要我的测试在不同的数据库版本上运行。 为此,我需要能够与golang容器中的每个sql容器进行对话。 我试过的: 方法1-使用--link: GO LANG应用程序容器 方法2-使用--ne