UNPKG

@augment-vir/node

Version:

A collection of augments, helpers types, functions, and classes only for Node.js (backend) JavaScript environments.

48 lines (47 loc) 1.79 kB
import { check } from '@augment-vir/assert'; import { runShellCommand } from '../../augments/terminal/shell.js'; import { updateImage } from '../docker-image.js'; import { waitUntilContainerRunning } from './container-status.js'; import { makeEnvFlags, makePortMapFlags, makeVolumeFlags, } from './docker-command-inputs.js'; import { killContainer } from './kill-container.js'; export async function runContainer({ containerName, imageName, detach, command, portMapping, volumeMapping, envMapping, executionEnv, removeWhenDone, useCurrentUser, dockerFlags = [], platform, }) { try { const portMapFlags = makePortMapFlags(portMapping); const envFlags = makeEnvFlags(envMapping); const detachFlag = detach ? '-d' : ''; const volumeMapFlags = makeVolumeFlags(volumeMapping); const rmFlag = removeWhenDone ? '--rm' : ''; const userFlag = useCurrentUser ? '--user "$(id -u)":"$(id -g)"' : ''; await updateImage(imageName, platform); const fullCommand = [ 'docker', 'run', portMapFlags, userFlag, volumeMapFlags, envFlags, rmFlag, detachFlag, `--name='${containerName}'`, ...dockerFlags, imageName, command, ] .filter(check.isTruthy) .join(' '); await runShellCommand(fullCommand, { env: executionEnv, rejectOnError: true, }); if (removeWhenDone) { await killContainer(containerName); } else if (detach) { await waitUntilContainerRunning(containerName); } } catch (error) { await killContainer(containerName); throw error; } }