当`Docker-compose up`中的容器没有输出时怎么办?

dwbf0jvd  于 12个月前  发布在  Docker
关注(0)|答案(3)|浏览(256)

这不是关于任何特定的解决方案,而是关于如何深入研究它,看看发生了什么。我有一个docker-compose.yml文件如下:

version: '2.2'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:6.6.0
    container_name: kibana

字符串
我没有容器,docker container list -a是空的。也没有网络或卷。
当我运行docker-compose up时,我从来没有得到任何输出:

Creating network "kibana_default" with the default driver
Creating kibana ... done
Attaching to kibana


如果我在同一个yml文件中添加一个ElasticSearch配置,我会得到它的输出,但kibana容器保持沉默。所以在这种情况下,它似乎是特定于kibana的。
我知道重新启动docker或计算机可能会解决这个问题,但我想了解发生了什么。
所以我的问题是,如果一个容器没有吐出输出,我的下一步是什么?有没有其他方法,我可以让它告诉我发生了什么?

**编辑:**我应该注意到,如果有任何问题,我不相信这与Kibana图像本身有任何关系。更有可能的是,我有一个配置设置导致这种行为,我不知道。这个问题的目的是帮助我弄清楚该设置可能是什么。

kulphzqa

kulphzqa1#

我相信我有一个(可能不是)答案。我仍然不确定问题是什么,但这似乎是另一个线程,我可以拉,如果必要的。
我可以从kibana镜像开始创建一个docker构建脚本:

FROM docker.elastic.co/elasticsearch/elasticsearch:6.6.0

字符串
从这里我有很多选择。我可以添加一些命令到图像,将吐出某种输出,然后启动kibana。这将帮助我了解,如果它是一个问题,输出只是没有使它在我可以看到它。这大大缩小了事情。如果kibana只是莫名其妙地挂起这个构建脚本让我调整一些设置和默认入口点标志,试图获得一些不同的事情发生。
这对其他人来说可能是显而易见的,也许有更好的方法来实现这一点。

ca1c2owp

ca1c2owp2#

这可能与标准输出缓冲有关。也就是说,在您的情况下,容器中可能没有足够的输出文本来触发输出。默认记录器驱动程序json-file始终使用缓冲。
您可以使用不同的日志记录器驱动程序作为docker run --log-driver journald ...来运行它(另请参阅logging drive configuration了解系统范围的设置,以及docker run了解每个容器的日志记录选项)
如果缓冲发生在容器端,请尝试添加显式的stdout刷新以更快地看到输出。

print("A message.")
sys.stdout.flush()

字符串
但是,对于您正在使用的现有图像,这可能不是一个选项。

a0zr77ik

a0zr77ik3#

这可能没有帮助,但在我的情况下,有一个非常奇怪的行为:
docker compose up不显示输出,它只是永远挂起“附加”
但是,如果我打开一个screen会话,并从它运行docker compose up命令,那么我会得到输出。
如果我取消docker运行,关闭screen会话,我可以在screen示例外运行docker compose up,然后输出是display。

相关问题