在 docker-compose.yml 文件中,我有一个入口点,它应该将文件复制到绑定安装,以便我可以从主机检索它们:
version: '3.9'
services:
my-service:
....
entrypoint: cp /foo/*.txt /data
volumes:
- ./data:/data
但每次我运行这个容器时,日志都会显示:cp: cannot stat '/foo/*.txt': No such file or directory
。另一方面,如果我输入完整的文件名,效果会很好。
我也尝试过:entrypoint: ['cp', '/foo/*.txt', '/data']
但是出现同样的错误。
参考:https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact
如何使用通配符在撰写服务中复制文件?
信息:
docker --version
Docker version 20.10.21, build baeda1f
cat /etc/lsb-release | grep DESCRIPTION
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
答案1
像这样的字符*
由 shell 解释,因此您需要调用 shell 来处理它(例如,sh -c 'cp /foo/*.txt /data'
)。否则,这些参数将被传递给exec
,它不知道如何处理*
,并且会发生您所描述的错误。