2016-04-20 4 views
0

Попытка запуска контейнера докеров в режиме демон с использованием сценария оболочки из службы Java, развернутой на Tomcat, на виртуальной машине на основе ubunty.Запуск демон докеров с Java-сервиса

У меня есть служба REST на основе Java, которая была развернута на tomcat, на той же виртуальной машине, в которой я установил Docker. Я создал файл оболочки для запуска моего контейнера докеров. При выполнении этого файла оболочки из терминала он работает отлично. Хотя, когда я запускаю этот файл оболочки из java каким-то образом, он не дает никаких ошибок и не выполняет команду docker внутри файла оболочки.

Обратите внимание, что если я пропустил точку или сделал что-то неправильно. Было бы жадно, если кто-то может мне помочь.

Shell Код файла фрагмент код. (Для тестирования в настоящее время дал Executed разрешения всех пользователям, использующих CHMOD 777)

#!/bin/bash 
echo First Parameter is $1 
echo Second Parameter is $2 
echo Third Parameter is $3 
sudo docker run -d -e PARAM1=$1 -e PARAM2=$2 -e PARAM3=$3 --name=$1 <docker_iamge_name> 

Java Codesnippet для вызова файла сценария (обратите внимание, что это не автономный класс Java Я использую этот фрагмент кода внутри на Java службы REST на основе которой развертывается на сервере Tomcat)

String command[]; 
command = new String[] {"/home/launcher/launcher_agent.sh","Param1","Param2", "Param3"}; 
Process process = Runtime.getRuntime().exec(command); 

на Выполнение выше JavaScript в журналах sdtout Tomcat получить следующее

First Parameter is Param1 
Second Parameter is Param2 
Third Parameter is Param3 

Сообщение, которое, если я проверю докер ps -a, я не вижу, как контейнер запускается.

Благодарим за ответ.

ответ

0

Я думаю, ваша проблема в том, что вы пытаетесь использовать sudo в своем launcher_agent.sh.

Чтобы понять, что на самом деле произошло с порожденным процессом, вам необходимо прочитать как process.getInputStream(), так и process.getErrorStream(). Последняя показывает вам точную ошибку (если она есть).

В вашем случае вы должны получить что-то вроде:

Sudo: нет терминальных настоящий и нет программы askpass указано

+0

Спасибо за быстрый ответ, который помогает много получать поток ошибок, мы обнаружили, что Sudo не существует и не спрашивает. Поэтому мы удалили sudo из сценария и добавили пользователя tomcat7 в группу докеров. Таким образом, теперь решение работает. –

Смежные вопросы