Я пытаюсь скомпилировать и выполнить java программу в контейнере док-станции в моем приложении узла. Я могу сделать это, сначала записав файл tmp.java
с помощью basi c javascript, а затем выполнив следующие команды оболочки:
docker run --rm -v $PWD:/app -w /app java:8 javac tmp.java
docker run --rm -v $PWD:/app -w /app java:8 java tmp
Однако сейчас я пытаюсь перейти на использование модуля dockerode и пытаюсь воспроизвести эту функцию следующим образом (на примере примера с github dockerode):
docker.run(
'java:8',
['javac', 'tmp.java'],
{
Volumes: {
'/': {}
},
WorkingDir: '/'
},
process.stdout
)
.then(data => {
var output = data[0]
console.log('OUTPUT: ', output)
var container = data[1]
console.log(output.StatusCode)
return container.remove()
})
Однако это не выводит и не генерирует tmp.class
, как ожидалось, когда я указываю опции Volumes
и WorkingDir
, и когда я пропускаю эти опции, я получаю ошибку: javac: file not found: tmp.java
, что, как я предполагаю, означает, что мой том не монтируется правильно , По сути, я пытаюсь создать временный микроконтейнер, скомпилировать и запустить мою java программу в контейнере, а затем уничтожить контейнер. Таким образом, я не могу установить JDK и скомпилировать программу локально на моей хост-системе, и мне приходится работать исключительно внутри контейнера.
В настоящее время я пытаюсь использовать обязательные команды Docker для достижения этой цели. case и могу выполнить sh, используя приведенные выше команды cli, однако я не могу сделать то же самое, используя dockerode
для узла (будь то с помощью обязательных команд или с помощью файла Docker).
I был бы очень признателен за любую помощь с этим!