我正在编写示例脚本,该脚本将从Docker容器中收集日志。
容器正在运行.NET Core应用程序(* .dll文件),并且使用Nlog将日志文件写入同一目录(程序集文件所在的目录)。
docker cp
脚本应该做什么:
sergey@023:~$ cat docker_running.txt
b0a6dbb31f4e,ecse00:5000/develop/client-api:latest
d80f5e5a2cf5,ecse00:5000/develop/document-uploader:latest
965e9b40a8d0,ecse00:5000/develop/data-analysis:latest
ef8a6bad36a7,ecse00:5000/develop/job-aggregator:latest
be4ccd899a61,ecse00:5000/develop/capture-plugin:latest
命令和容器的图像名称(文本文件中的第二个值)从容器文件系统复制日志文件这里我有一个问题-如何从文本文件中获取第二个值并将其替换为Shell脚本?
放置到文件中的docker示例输出为:
docker cp
第一个是容器ID,第二个(在冒号之后)是映像名称+标记,其前面是docker注册表地址。
我尝试了很多选项,但仍然不知道如何正确编写脚本。
更新:该脚本似乎正在运行,最后一个问题是如何将图像名称替换为sergey@ECSE00:~$ sh collect_logs.sh
Checking log dir presence
Log dir created
Creating log dir for the current log saving iteration
Copying log files from container f44d14d08b61
Error: No such container:path: f44d14d08b61:/app/\${imagename@Q}_app.json
Error: No such container:path: f44d14d08b61:/app/\${imagename@Q}_errors.json
Error: No such container:path: f44d14d08b61:/app/\${imagename@Q}_sql.json
Error: No such container:path: f44d14d08b61:/app/\${imagename@Q}_webHost.json
Checking log dir presence
Log dir exist
Creating log dir for the current log saving iteration
Copying log files from container 13f0069c207a
client-api
Error: No such container:path: 13f0069c207a:/app/\${imagename@Q}_app.json
Error: No such container:path: 13f0069c207a:/app/\${imagename@Q}_errors.json
Error: No such container:path: 13f0069c207a:/app/\${imagename@Q}_sql.json
Error: No such container:path: 13f0069c207a:/app/\${imagename@Q}_webHost.json
Checking log dir presence
Log dir exist
Creating log dir for the current log saving iteration
Copying log files from container 8ff648fa8b04
document-uploader
Error: No such container:path: 8ff648fa8b04:/app/\${imagename@Q}_app.json
Error: No such container:path: 8ff648fa8b04:/app/\${imagename@Q}_errors.json
Error: No such container:path: 8ff648fa8b04:/app/\${imagename@Q}_sql.json
Error: No such container:path: 8ff648fa8b04:/app/\${imagename@Q}_webHost.json
Checking log dir presence
Log dir exist
Creating log dir for the current log saving iteration
Copying log files from container 1ee8ad5cab31
data-analysis
Error: No such container:path: 1ee8ad5cab31:/app/\${imagename@Q}_app.json
Error: No such container:path: 1ee8ad5cab31:/app/\${imagename@Q}_errors.json
Error: No such container:path: 1ee8ad5cab31:/app/\${imagename@Q}_sql.json
Error: No such container:path: 1ee8ad5cab31:/app/\${imagename@Q}_webHost.json
Checking log dir presence
Log dir exist
Creating log dir for the current log saving iteration
Copying log files from container 53a8467cd7f6
job-aggregator
Error: No such container:path: 53a8467cd7f6:/app/\${imagename@Q}_app.json
Error: No such container:path: 53a8467cd7f6:/app/\${imagename@Q}_errors.json
Error: No such container:path: 53a8467cd7f6:/app/\${imagename@Q}_sql.json
Error: No such container:path: 53a8467cd7f6:/app/\${imagename@Q}_webHost.json
命令:
new
答案 0 :(得分:0)
最终(有效)版本如下:
#!/bin/sh
DATE=`date +%Y%m%d`
LOGPATH="/var/log/kbci-ocr"
LOGDIR="${LOGPATH}/LOG-${DATE}"
LOGERR="${LOGDIR}/err.log"
docker ps --format {{.ID}},{{.Image}} > docker_running.txt
file=docker_running.txt
for i in `cat $file`
do
echo "Checking log dir presence"
if [ ! -d $LOGDIR ]
then
mkdir -p $LOGDIR
echo "Log dir created"
else
echo "Log dir exist"
fi
echo "Creating log dir for the current log saving iteration"
container=$(echo $i | cut -d"," -f1)
TARGETDIR="${LOGDIR}/${container}_$(date +%Y%m%d_%H%M%S)"
mkdir -p $TARGETDIR
imagename=$(echo $i | cut -d"," -f2 | cut -d"/" -f4 | cut -d":" -f1)
echo "Copying log files from container ${container} \ image ${imagename} to path ${TARGETDIR}"
if [ "$imagename" = "client-api" ]
then
$(docker cp ${container}:/app/\\${imagename}_app.json $TARGETDIR)
$(docker cp ${container}:/app/\\${imagename}_errors.json $TARGETDIR)
$(docker cp ${container}:/app/\\${imagename}_sql.json $TARGETDIR)
$(docker cp ${container}:/app/\\${imagename}_webHost.json $TARGETDIR)
elif [ "$imagename" = "data-analysis" ]
then
$(docker cp ${container}:/app/\\${imagename}_app.json $TARGETDIR)
$(docker cp ${container}:/app/\\${imagename}_sql.json $TARGETDIR)
elif [ "$imagename" = "job-aggregator" ]
then
$(docker cp ${container}:/app/\\${imagename}_app.json $TARGETDIR)
$(docker cp ${container}:/app/\\${imagename}_mt.json $TARGETDIR)
elif [ "$imagename" = "document-uploader" ]
then
$(docker cp ${container}:/app/\\${imagename}_app.json $TARGETDIR)
elif [ "$imagename" = "capture-plugin" ]
then
$(docker cp ${container}:/app/\\${imagename}_app.json $TARGETDIR)
$(docker cp ${container}:/app/\\${imagename}_mt.json $TARGETDIR)
$(docker cp ${container}:/app/\\${imagename}_sql.json $TARGETDIR)
fi
done
rm -rf docker_running.txt