管道 Docker 执行命令 returns 出错

Piping in Docker exec command returns an error

我尝试执行的命令

docker exec apache_mp 'find / -type f -name artisan 2>&1 | grep -v "Permission denied"'

returns

OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"find / -type f -name artisan 2>&1 | grep -v Permission\": stat find / -type f -name artisan 2>&1 | grep -v Permission: no such file or directory": unknown

这很奇怪,因为 运行 来自 portainer 的相同命令确实有效。这是为什么?

Docker 假定容器名称后的第一个参数应该是要执行的二进制文件。由于'find / -type f -name artisan 2>&1 | grep -v "Permission denied"'在括号中,docker认为整个事情就是二进制文件的名称。

您可以使用 bash 作为二进制文件使其工作:

docker exec apache_mp /bin/bash -c ' find / -type f -name artisan 2>&1 | grep -v "Permission denied"'