【问题标题】:Storing last line of Docker log tail to a shell variable将 Docker 日志尾部的最后一行存储到 shell 变量
【发布时间】:2019-03-25 05:24:35
【问题描述】:

我要做的就是将docker log 的最后一行捕获到shell 脚本中的一个变量中。

这是我的设置:

Dockerfile:

FROM python:3.7.2
WORKDIR /workspace
RUN pip install jupyterlab
EXPOSE 8888
ENTRYPOINT ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--no-browser"]

run.sh:

#!/bin/sh

docker build -t ml/jupyterlab .
docker rm -f ml-jupyterlab
docker run -d -p 8888:8888 -v $(pwd)/src:/workspace --name ml-jupyterlab ml/jupyterlab

until [[ "$url_info" =~ "token" ]]; do
    url_info=$(docker logs ml-jupyterlab --tail 1)
    sleep 0.1 
done

echo "$url_info"

如果有帮助,这里是来自 Docker 容器的登录信息,我正在尝试捕获 $url_info 中的最后一行 http://(6f8bec0aa3d9 or 127.0.0.1):8888/?token=a6001a419b22d60dd3e5215d52794c5be7c0b368664c3505

[I 05:22:37.925 LabApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 05:22:39.190 LabApp] JupyterLab extension loaded from /usr/local/lib/python3.7/site-packages/jupyterlab
[I 05:22:39.190 LabApp] JupyterLab application directory is /usr/local/share/jupyter/lab
[W 05:22:39.194 LabApp] JupyterLab server extension not enabled, manually loading...
[I 05:22:39.198 LabApp] JupyterLab extension loaded from /usr/local/lib/python3.7/site-packages/jupyterlab
[I 05:22:39.198 LabApp] JupyterLab application directory is /usr/local/share/jupyter/lab
[I 05:22:39.199 LabApp] Serving notebooks from local directory: /workspace
[I 05:22:39.199 LabApp] The Jupyter Notebook is running at:
[I 05:22:39.200 LabApp] http://(6f8bec0aa3d9 or 127.0.0.1):8888/?token=a6001a419b22d60dd3e5215d52794c5be7c0b368664c3505
[I 05:22:39.200 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 05:22:39.204 LabApp]

    To access the notebook, open this file in a browser:
        file:///root/.local/share/jupyter/runtime/nbserver-1-open.html
    Or copy and paste one of these URLs:
        http://(6f8bec0aa3d9 or 127.0.0.1):8888/?token=a6001a419b22d60dd3e5215d52794c5be7c0b368664c3505

执行以下操作

$ chmod +x run.sh
$ ./run.sh

进入无限循环,$url_info 仍然是null

【问题讨论】:

    标签: linux shell docker unix scripting


    【解决方案1】:

    最后,我使用以下脚本解决了这个问题:

    #!/bin/sh
    
    docker build -t ml/jupyterlab .
    docker rm -f ml-jupyterlab
    docker run -d -p 8888:8888 -v $(pwd)/src:/workspace --name ml-jupyterlab ml/jupyterlab
    
    until [[ "${url_info}" != "" ]]; do
        docker logs ml-jupyterlab &> logs
        url_info=$(cat logs | grep token | head -1)
        sleep 0.1 
    done
    
    
    echo "$url_info"
    

    【讨论】:

      【解决方案2】:

      有可能在暂停的 0.1 秒内产生多个个日志文件,包括一个带有“token”的日志文件。

      这意味着最新的行可能包含令牌(它已经在日志中,在前面的行中)

      替换你的测试
      until [[ "${url_info}" != "" ]]; do
          url_info=$(docker logs ml-jupyterlab --tail 100|grep token)
          sleep 0.1 
      done
      

      只要url_info 为空,继续测试。

      【讨论】:

      • 非常感谢您的帮助。但是,此解决方案对我没有帮助。如果我运行url_info=$(docker logs ml.langiq.goviq.io --tail 100 | grep token)echo $url_info - 输出仍然是newline
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多