【问题标题】:Container exit when I run them separately from docker-compose当我将它们与 docker-compose 分开运行时,容器退出
【发布时间】:2020-06-25 06:32:25
【问题描述】:

我从here 运行其中一个开源微服务。当我运行 docker ps 时,所有容器状态都为 UP,意味着它们继续运行。我的问题是当我单独运行一个容器时,它没有继续运行并退出。以下是 docker-compose 文件中定义的服务之一。

social-graph-service:

   image: yg397/social-network-microservices
   hostname: social-graph-service
   restart: always
   entrypoint: SocialGraphService

当我使用命令运行它时

sudo docker run -d --restart always --entrypoint SocialGraphService --hostname social-graph-service yg397/social-network-microservices

然后它的状态不是UP,运行后退出。当我使用 sudo docker-compose up 运行它们时,为什么所有容器都在连续运行?当我单独运行它们时退出?

【问题讨论】:

  • 你能分享你的 docker-compose.yml 文件吗?
  • ...以及来自容器的日志,以及您的应用程序源代码是否足以重现问题?
  • 那个入口点看起来很可疑——你能证明它的合理性吗?
  • 这是一个开源项目,可在 github github.com/delimitrou/DeathStarBench/tree/master/socialNetwork
  • 当我通过“ sudo docker run --restart always --entrypoint SocialGraphService --hostname social-graph-service yg397/social-network-microservices”在前台模式下运行它时,就会出现这个错误“终止在抛出 'std::runtime_error' what() 的实例后调用:解析地址时出错:名称或服务未知”

标签: docker docker-compose dockerfile containers microservices


【解决方案1】:

看起来图形服务依赖于 MongoDB 才能运行。我的猜测是当你单独运行它时它会崩溃,因为 mongo 实例不存在并且无法连接。

repo 的作者编写了 docker-compose 文件来隐藏一些复杂性,但这是微服务之间的大量关系树,其中大多数似乎依赖于现有的其他服务才能启动。

-- 更新--

真正的问题在于下面的 cmets。 OP 在尝试启动另一个容器时已经在运行 docker-compose 堆栈,但忘记将容器连接到 docker-compose 生成的 docker 网络。

【讨论】:

  • 我已经使用 docker-compose 运行了所有服务,并且所有这些容器都在连续运行。现在我只运行图形服务容器,我认为如果图形服务依赖于 mongoB,那么它会找到 mongoDB。
  • 服务不能在不提供主机名的情况下find mongo 实例,但看起来 repo 挂载了一个包含这些主机的全局 config/service-config.json 文件。假设它已正确安装,那么它将被找到。但是,docker-compose 也会为 compose 堆栈生成隔离的网络。要查找网络名称,请运行 docker network lsYou can then connect the container to said network at runtime
  • 它有效。我的错误是我没有将容器与应用程序网络连接。现在它的状态也是UP。我犯了多么愚蠢的错误。感谢 David 帮助我并节省了我浪费的时间。
  • 这个答案实际上并不包含答案(关于网络和服务发现/dns)。您能否更新答案,以便将来阅读它的其他人可以理解这里的根本问题。谢谢。
  • 在上面的答案中添加了更新以引用结论
猜你喜欢
  • 2020-08-24
  • 2021-07-15
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 2019-09-26
相关资源
最近更新 更多