【问题标题】:Docker exec command is very slowDocker exec 命令很慢
【发布时间】:2020-08-15 17:57:12
【问题描述】:

我已经构建了 docker 容器系统,其中容器包含命令行应用程序。我传递参数并使用来自另一个应用程序的 docker exec 命令运行应用程序。

当我从 docker 内部运行命令行应用程序时,需要 0.003 秒才能运行。

$ time comlineapp "hello"

但是当我使用 docker exec 从外部 docker 运行它时,需要 0.500 秒

$ time docker exec comline app "hello"

很明显 docker exec 需要很多时间。我们需要任何帮助来尽可能减少 docker exec 命令的时间。

这里是 docker 文件

FROM ubuntu:18.04

RUN adduser --disabled-password --gecos "" newuser

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get -y install time && \
    apt-get -y install gcc mono-mcs && \
    apt-get install pmccabe && \
    rm -rf /var/lib/apt/lists/*

所有必需的软件都已安装。

【问题讨论】:

  • 你能分享你的 dockerfile 吗?您是在容器启动时安装软件还是在启动应用程序之前在容器启动时进行任何其他操作?
  • 我对 docker 文件详细信息提出了 ypdated 问题。所有必需的软件都已安装。我所说的应用程序是我从外部调用的 gcc。
  • 有类似的担忧,但是我只得到 170 毫秒的开销。我还没有任何想法,但我运行 strace (strace -ttt -T -f docker exec ...),它会产生有趣的提示。另外我了解到docker CLI实际上是使用HTTP协议访问docker引擎,所以这也可能是开销的原因。
  • @Kuchara 你对此有进一步了解吗?

标签: docker docker-exec


【解决方案1】:

当您从外部 docker 发送请求时,会有(多个)API 请求通过 unix 套接字和进程本身的许多额外设置,例如应用 seccomp 配置文件、设置命名空间、删除权限等。 利用 docker 的正确方法是在其中创建一个服务,然后让端点处理这些。一个简单的 python 服务应该可以满足这一点。我们在我们的平台上进行了相同的更改,并保存了 1000 毫秒的帖子。

【讨论】:

    猜你喜欢
    • 2019-04-28
    • 1970-01-01
    • 2016-03-30
    • 2018-11-17
    • 2021-08-22
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多