Запустите Docker-контейнер из Java-программы - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь запустить Docker-контейнер изнутри Java-программы, но Docker-контейнер не запускается.

Когда я выполняю эту команду, я использую для компоновщика процессов в терминале контейнер, который запускается и всеработает.

Я напечатал рабочий каталог внутри java-программы, и это правильный каталог для запуска контейнера Docker.

Я также изменил команду на:

String[] dockerCommand = new String[] {"java", "-cp", "target/MavenAsteroidsServer-1.0-SNAPSHOT.jar", "asteroidsserver.AsteroidsServer", "1600", "1600", "127.0.1.1", "8851", "8901"};

Это сработало, поэтому работает программа без контейнера Docker.

Это код, который я использовал для запуска контейнера Docker изнутри Java-программы:

String[] dockerCommand = new String[] {"docker", "run", "-it", "--rm", "--net=\"host\"", "-p", "8901:8901", "-v", "\"$PWD\":/app", "-w", "/app", "demo/maven:3.3-jdk-8", "java", "-cp", "target/MavenAsteroidsServer-1.0-SNAPSHOT.jar", "asteroidsserver.AsteroidsServer", "1600", "1600", "127.0.1.1", "8851", "8901"};

ProcessBuilder probuilder = new ProcessBuilder(dockerCommand);

Process process;
try {
    process = probuilder.start();
    int status = process.waitFor();
} catch (InterruptedException e) {
} catch (IOException ex) {
}

Я хочу контейнербежать, но ничего не происходит.Кроме того, я не получаю сообщений об ошибках при попытке перехватить их в блоке try и catch (не показано в коде)

1 Ответ

0 голосов
/ 21 декабря 2018

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

..., "-v", "\"$PWD\":/app", ...

говорит Docker (я думаю) создать новый именованный том с именем "$PWD" (как в кавычках, долларах, P, W, D, кавычках) исмонтировать новый пустой том на /app в контейнере.Ничто не заставит это расшириться до имени текущего каталога или удалить лишние кавычки.

...