【问题标题】:How can I see output from docker-compose services when running interactive command?运行交互式命令时如何查看 docker-compose 服务的输出?
【发布时间】:2018-01-30 13:37:48
【问题描述】:

我有一个像这样的 docker-compose 文件:

my-service:
    ...

interactive-command:
    links:
        - my-service
    ...

我这样调用它:

docker-compose -f path/to/docker-compose.yml run interactive-command

(实际上,我在文件中有两个命令都链接到服务,有时我运行一个,有时另一个,但我认为这对问题没有影响。)

主要问题是,我没有看到 my-service 的任何输出。特别是,我看不到它的错误消息(尽管我可以使用“docker logs”找到它们)。此外,即使服务退出,interactive-command 也会继续运行,但在这种情况下它应该退出并出现错误。

另一方面,如果我使用“docker-compose up”而不是“docker-compose run”,我会从所有服务中获得格式良好的输出,但是我似乎无法与交互式命令,即使我为交互式命令设置了“tty: true”和“stdin_open: true”。

我该怎么办?

【问题讨论】:

  • 您要查找的输出是否来自我的服务?
  • 是的。没错。

标签: docker docker-compose


【解决方案1】:

您可以使用docker exec -ti <interactive container> bash 获取交互式容器上的外壳。

【讨论】:

  • 我想你一定是看得太快了,以为我在问别的问题。
  • 嗯,也许吧。 Exec 为您提供了一种与容器交互的方式。无法在同一终端中同时拥有交互式容器和来自其他容器的日志。
  • 好的,我想这回答了我的问题。不过,这似乎是一个任意限制。在我的例子中,我有一个容器,它运行一个命令来获取一个 IP 地址,然后通过它建立一个 ssh 隧道。另一个容器通过隧道运行数据库客户端。如果设置隧道出现问题,用户可以看到错误消息。
  • 另外,如果隧道容器停止,数据库客户端容器也可以停止。我不能为此使用--abort-on-container-exit,因为它仅适用于up,不适用于run。我想也许我可以在docker-compose.yml 文件中添加一些内容?
  • Compose 没有任何方法可以做到这一点。您可能对dobi 感兴趣,这是我一直在从事的一个项目。它允许您配置在容器中运行的项目任务,并且还可以启动 Compose 项目。当任务完成时,它将处理停止和删除容器。我认为它可能适用于您的用例。
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多