从主机访问 docker 卷中写入的文件
Access files written in docker volumes from the host
我有一个 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$
可能是什么原因?
您的本地 shell 在循环发生之前扩展了双引号内的变量 expansion。将双引号改为单引号。
也就是说,当你 运行
sudo bash -c "for ... ; do echo ${logfile}; done"
首先,您的本地 shell 将变量引用替换为您的本地环境为 $logfile
设置的任何内容,可能什么都没有
sudo bash -c 'for ...; do echo ; done'
然后它 运行 就是那个命令。如果您最初将其更改为单引号
sudo bash -c 'for ... ; do echo ${logfile}; done'
它将避免这种扩展。
只要把echo
这个词放在命令的前面就可以看到:shell会进行扩展,然后echo
会打印出命令会有 运行.
我有一个 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$
可能是什么原因?
您的本地 shell 在循环发生之前扩展了双引号内的变量 expansion。将双引号改为单引号。
也就是说,当你 运行
sudo bash -c "for ... ; do echo ${logfile}; done"
首先,您的本地 shell 将变量引用替换为您的本地环境为 $logfile
设置的任何内容,可能什么都没有
sudo bash -c 'for ...; do echo ; done'
然后它 运行 就是那个命令。如果您最初将其更改为单引号
sudo bash -c 'for ... ; do echo ${logfile}; done'
它将避免这种扩展。
只要把echo
这个词放在命令的前面就可以看到:shell会进行扩展,然后echo
会打印出命令会有 运行.