2015-03-15 4 views
5

У меня проблема с хранением вывода docker run -it -d -p 43211:3000 --name appname -h hostname -v $PWD/local_dir:/root/remote_dir repo/imagename в варибале BASH. Я попробовал «backticks», я также попробовал запустить его, как говорят официальные документы BASH_VAR=$(docker run ...), я даже попытался сохранить вывод в файле с docker run --...>$FILE_DESCRIPTOR, но не повезло, сохранив ситуацию с ошибкой, ситуацию, когда имя уже используется другим контейнером, как так:Выход команды `docker run` в переменной BASH

$ FATA[0000] Error response from daemon: Conflict. The name "appname" is already in use by container 7c84d8d703c8. You have to delete (or rename) that container to be able to reuse that name.

Я хочу сказать, что это работает для ситуации успеха, так что я в состоянии хранить в BASH_VAR полный идентификатор контейнера, при запуске приложения успешно, но, к сожалению, это решает только половину проблема, с которой я сталкиваюсь.

Любая помощь будет оценена по достоинству.

Спасибо!

+4

делает 'выход = $ (докер запустить -это -d -p 43211: 3000 - имя appname -h hostname -v $ PWD/local_dir:/root/remote_dir repo/imagename 2> & 1) 'работает для вас? '2> & 1' перенаправляет stderr на stdout. – hek2mgl

+0

Спасибо, добрый сэр! Да, @ kek2mgl, он работал как шарм! Причина, по которой я нуждаюсь в этом, заключается в том, что я создаю скрипт для управления интерактивным docker-контейнером bash с помощью [Dialog] (http://linux.die.net/man/1/dialog), и мне нужно разобрать вывод всех команд Я выхожу за кулисами. Вы можете ответить на вопрос, чтобы я мог отметить ваш комментарий как правильный ответ. –

+0

У меня есть сценарий bash как это '#!/Usr/bin/bash result = $ (docker run -e' SITE = WL '-h pingnet --name pingnet --rm pingnet 2> & 1) echo $ {result } 'и не отображает результат – irom

ответ

0

Вы можете использовать цикл while, чтобы читать каждую строку вывода по мере ее создания и делать с ней что-то в этом роде.

while read -r line_of_output; do 
    echo "line: $line_of_output" 

done < <(docker ... 2>&1) 

Кроме того, если вы пишете интерактивный сценарий, вы можете проверить вне select Баша встроенных

$ help select 
select: select NAME [in WORDS ... ;] do COMMANDS; done 
    Select words from a list and execute commands. 
Смежные вопросы