Цель:
Запуск контейнера "A", который в основном является сервером nodejs.Этот сервер должен запускать исполняемый файл, такой как «E», который отображается в другом работающем контейнере.
в упрощенном коде.«A» содержит этот фрагмент кода, который использует «E».
const spawn = require('child_process').spawn;
const someArgsForE = {
arg1:"some_string",
arg2:123
};
// E is the executable that would be normally run as 'docker run E '{ arg1:"some_string", arg2:123}' ... (ignore the correct escaping)
let childProcess = spawn("E", [JSON.stringify(someArgsForE)]);
childProcess.on('close', (code, signal) => {
//do whatever with the result... maybe write in a volume
});
В идеале «A» может реализовать некоторую логику, чтобы он мог знать о существовании «E».
If(serviceExists("E")){ ... do whatever ...}
Поскольку еще один исполняемый файл "E_b" может существовать и использоваться тем же сервером "A".
Я не могу понять, как я могу добиться этого с помощью docker-составьте без переноса "E" и, возможно, "E_b" в другие службы nodejs, но обращайтесь к ним как к исполняемым файлам.
Чтобы иметь докер внутри докера и использовать что-то вроде
let childProcess = spawn("docker", ["run", "E", args]);
,тоже не идеал.
Любое чистое возможное решение?