Сохранение последней строки хвоста журнала Docker в переменной оболочки - PullRequest
1 голос
/ 25 марта 2019

Все, что я пытаюсь сделать, это захватить последнюю строку docker log в переменную в сценарии оболочки.

Вот мои настройки:

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, и я пытаюсь захватить последнюю строку http://(6f8bec0aa3d9 or 127.0.0.1):8888/?token=a6001a419b22d60dd3e5215d52794c5be7c0b368664c3505 в $url_info

[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

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Наконец, я решил эту проблему с помощью следующего скрипта:

#!/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"
0 голосов
/ 25 марта 2019

Возможно, что в течение 0,1 с паузы будет создано несколько файлов журнала, включая один с "token".

Это будет означать, что последняя строка может не включает токен (который уже есть в журналах в предыдущих строках)

Замените ваш тест на

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

Пока url_info пусто, продолжайте тестирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...