【问题标题】:Connecting to Docker container connection refused - but container is running连接到 Docker 容器连接被拒绝 - 但容器正在运行
【发布时间】:2015-12-10 16:12:52
【问题描述】:

我正在运行 2 个 Spring Boot 应用程序:一个客户端和 rest-api。客户端与与 mongodb 数据库通信的 rest-api 通信。所有 3 层都在 docker 容器内运行。

我启动容器时通常会在 dockerfile 中指定公开的端口,并将它们映射到主机上的端口,例如:-p 7070:7070,其中 7070 是 Dockerfile 中公开的端口。

当我通过java -jar [application_name.war] 命令运行应用程序时,应用程序工作正常并且它们都可以通信。

但是,当我在 Docker 容器中运行应用程序时,我收到连接被拒绝错误,例如当客户端尝试连接到 rest-api 时,我在http://localhost:7070 收到连接被拒绝错误。

但是命令docker ps 显示容器都在运行并监听暴露和映射的端口。

我不知道为什么容器没有识别出其他容器正在运行并监听它们的端口。

这和iptables有关系吗?

感谢任何帮助。

谢谢

编辑 1:在容器内运行的应用程序在我的机器上运行良好 ,它们不会引发任何连接被拒绝错误。该错误仅发生在该特定的不同机器上。

【问题讨论】:

  • 使用docker exec -it container_id bash 进入容器并像在任何系统上一样对其进行调试,例如netstat -an 是否显示预期结果?
  • “仅在特定的不同机器上发生”。你并没有让这很容易诊断。为什么那台机器不一样?
  • 它是一个 ec2 实例,它在那里不起作用。我还配置了 AWS 安全组以允许应用程序侦听的端口上的连接。我会尝试 sshing 进入容器
  • @user2915097,当我进入容器时显示“netstat: command not found”
  • 你如何引用你的依赖?如果您使用的是localhost:<port>,它就无法工作,因为您所有的容器都会获得不同的地址。要么公开所有端口并通过主机地址引用,要么更好地使用容器链接。

标签: docker spring-boot dockerfile ports connection-refused


【解决方案1】:

我使用容器链接来解决这个问题。确保在运行时将--link <name>:<alias> 添加到要链接的容器中。 <name> 是您要链接到的容器的名称,<alias> 将是 Spring 的 application.properties 文件中条目的主机/域。

例子:

spring.data.mongodb.host=mongodb 如果在运行时提供的别名是 'mongodb':

--link myContainerName:mongodb

【讨论】:

  • 很好,回答你自己的问题。
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 2020-09-02
  • 2021-06-11
  • 2019-01-05
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多