我有一个Docker容器将日志文件写入名称卷。
我想从主机分析日志文件并搜索给定的日志消息。但是,当我访问“ docker inspect VOLUMNAME”给出的文件夹时,出现奇怪的行为,我不理解。
例如以下命令确实将空行作为输出:
user@docker-host-01:~/docker-server-env/otaya-designdb$ sudo bash -c "for logfile in /var/lib/docker/volumes/design-db-logs/_data/*/*; do echo ${logfile}; done"
user@docker-host-01:~/docker-server-env/otaya-designdb$
可能是什么原因?
答案 0 :(得分:1)
在循环发生之前,您的本地shell正在双引号内扩展变量扩展。将双引号更改为单引号。
也就是说,当您运行
sudo bash -c "for ... ; do echo ${logfile}; done"
首先,您的本地外壳程序会用您为$logfile
设置的本地环境替换变量引用,可能什么都不会
sudo bash -c 'for ...; do echo ; done'
,然后运行该命令。如果您最初将其更改为单引号
sudo bash -c 'for ... ; do echo ${logfile}; done'
它将避免这种扩展。
您只需在命令的前面加上echo
一词就可以看到这一点:shell将对其进行扩展,然后echo
将输出将要运行的命令。