Docker exec 命令中的管道返回错误

onl*_*mas 4 exec docker

我尝试执行的命令

docker exec apache_mp 'find / -type f -name artisan 2>&1 | grep -v "Permission denied"'
Run Code Online (Sandbox Code Playgroud)

回报

OCI 运行时执行失败:执行失败:container_linux.go:348: 启动容器进程导致“exec: \”find / -type f -name artisan 2>&1 | grep -v 权限\": stat find / -type f -name artisan 2>&1 | grep -v 权限: 没有这样的文件或目录": 未知

这很奇怪,因为当从portainer运行相同的命令时它确实有效。为什么是这样?

在此输入图像描述

Ign*_*lán 6

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"'
Run Code Online (Sandbox Code Playgroud)