可以传递给 Docker 的字符串 CMD 的最大大小

Max size of string CMD that can be passed to Docker

在 Docker 参考资料中,我没有找到任何关于字符串可以传递给 Docker CMD 多长时间的信息。

  1. 有什么限制?
  2. 我可以传递给 CMD 的最大字符数是多少?

我做了一个简单的测试,发现在我的 CentOS 7/x64 机器上 dockerfile 行的限制是 65535。

#./build.sh
Sending build context to Docker daemon    363kB
Error response from daemon: failed to parse Dockerfile: dockerfile line greater than max allowed size of 65535

@ZenithS 你适合 Windows(8192 个字符),但 Linux 并不那么容易。

简而言之:对于 Linux,它被硬编码为 64 或 128 kiB。您可以查看 xargs --show-limits,它提供了非常详细的概述:

Your environment variables take up 5354 bytes
POSIX upper limit on argument length (this system): 2089750 <-- ARG_MAX
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2084396 <-- ARG_MAX - ENV
Size of command buffer we are actually using: 131072 <-- Hardcoded limit which applies actually (see below)
Maximum parallelism (--max-procs must be no greater): 2147483647

硬编码限制为 MAX_ARG_STRLEN,设置为 PAGE_SIZE * 32 https://github.com/torvalds/linux/blob/v5.16-rc7/include/uapi/linux/binfmts.h#L15

使用 getconf PAGE_SIZE 您可以检查(在现代平台上主要是 2048 或 4096),结果为 64 或 128 kiB。