Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/spec-node/devContainers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import { Event } from '../spec-utils/event';

export interface ProvisionOptions {
dockerPath: string | undefined;
runtimeArgs?: string[];
dockerComposePath: string | undefined;
containerDataFolder: string | undefined;
containerSystemDataFolder: string | undefined;
Expand Down Expand Up @@ -206,18 +207,20 @@ export async function createDockerParams(options: ProvisionOptions, disposables:
const buildKitVersion = options.useBuildKit === 'never' ? undefined : (await dockerBuildKitVersion({
cliHost,
dockerCLI: dockerPath,
runtimeArgs: options.runtimeArgs,
dockerComposeCLI,
env: cliHost.env,
output,
buildPlatformInfo,
targetPlatformInfo
}));

const cliVariant = await lookupCLIVariant({ exec: cliHost.exec, cmd: dockerPath, env: cliHost.env, output });
const cliVariant = await lookupCLIVariant({ exec: cliHost.exec, cmd: dockerPath, args: options.runtimeArgs, env: cliHost.env, output });

const dockerEngineVer = await dockerEngineVersion({
cliHost,
dockerCLI: dockerPath,
runtimeArgs: options.runtimeArgs,
dockerComposeCLI,
env: cliHost.env,
output,
Expand All @@ -229,6 +232,7 @@ export async function createDockerParams(options: ProvisionOptions, disposables:
common,
parsedAuthority,
dockerCLI: dockerPath,
runtimeArgs: options.runtimeArgs,
cliVariant,
dockerComposeCLI: dockerComposeCLI,
dockerEnv: cliHost.env,
Expand Down
15 changes: 14 additions & 1 deletion src/spec-node/devContainersSpecCLI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/

import * as path from 'path';
import yargs, { Argv } from 'yargs';
import yargs, { Argv, Options } from 'yargs';
import textTable from 'text-table';

import * as jsonc from 'jsonc-parser';
Expand Down Expand Up @@ -46,6 +46,13 @@ import { templatesGenerateDocsHandler, templatesGenerateDocsOptions } from './te
import { mapNodeOSToGOOS, mapNodeArchitectureToGOARCH } from '../spec-configuration/containerCollectionsOCI';
import { templateMetadataHandler, templateMetadataOptions } from './templatesCLI/metadata';

const runtimeArgOption = {
type: 'string',
nargs: 1,
coerce: (arg: string | string[]) => Array.isArray(arg) ? arg : [arg],
description: 'Argument to prepend to commands of the container runtime executable selected by --docker-path. Repeat --runtime-arg=VALUE for each argument.',
} satisfies Options;

const defaultDefaultUserEnvProbe: UserEnvProbe = 'loginInteractiveShell';

const mountRegex = /^type=(bind|volume),source=([^,]+),target=([^,]+)(?:,external=(true|false))?$/;
Expand Down Expand Up @@ -354,6 +361,7 @@ async function doProvision(options: ProvisionOptions, providedIdLabels: string[]
function setUpOptions(y: Argv) {
return y.options({
'docker-path': { type: 'string', description: 'Docker CLI path.' },
'runtime-arg': runtimeArgOption,
'container-data-folder': { type: 'string', description: 'Container data folder where user data inside the container will be stored.' },
'container-system-data-folder': { type: 'string', description: 'Container system data folder where system data inside the container will be stored.' },
'container-id': { type: 'string', required: true, description: 'Id of the container.' },
Expand Down Expand Up @@ -402,6 +410,7 @@ async function setUp(args: SetUpArgs) {
async function doSetUp({
'user-data-folder': persistedFolder,
'docker-path': dockerPath,
'runtime-arg': runtimeArgs,
'container-data-folder': containerDataFolder,
'container-system-data-folder': containerSystemDataFolder,
'container-id': containerId,
Expand Down Expand Up @@ -431,6 +440,7 @@ async function doSetUp({
const configFile = configParam ? URI.file(path.resolve(process.cwd(), configParam)) : undefined;
const params = await createDockerParams({
dockerPath,
runtimeArgs,
dockerComposePath: undefined,
containerSessionDataFolder,
containerDataFolder,
Expand Down Expand Up @@ -787,6 +797,7 @@ function runUserCommandsOptions(y: Argv) {
return y.options({
'user-data-folder': { type: 'string', description: 'Host path to a directory that is intended to be persisted and share state between sessions.' },
'docker-path': { type: 'string', description: 'Docker CLI path.' },
'runtime-arg': runtimeArgOption,
'docker-compose-path': { type: 'string', description: 'Docker Compose CLI path.' },
'container-data-folder': { type: 'string', description: 'Container data folder where user data inside the container will be stored.' },
'container-system-data-folder': { type: 'string', description: 'Container system data folder where system data inside the container will be stored.' },
Expand Down Expand Up @@ -848,6 +859,7 @@ async function runUserCommands(args: RunUserCommandsArgs) {
async function doRunUserCommands({
'user-data-folder': persistedFolder,
'docker-path': dockerPath,
'runtime-arg': runtimeArgs,
'docker-compose-path': dockerComposePath,
'container-data-folder': containerDataFolder,
'container-system-data-folder': containerSystemDataFolder,
Expand Down Expand Up @@ -892,6 +904,7 @@ async function doRunUserCommands({

const params = await createDockerParams({
dockerPath,
runtimeArgs,
dockerComposePath,
containerDataFolder,
containerSystemDataFolder,
Expand Down
1 change: 1 addition & 0 deletions src/spec-node/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ export interface DockerResolverParameters {
common: ResolverParameters;
parsedAuthority: ParsedAuthority | undefined;
dockerCLI: string;
runtimeArgs?: string[];
cliVariant: CLIVariant;
dockerComposeCLI: () => Promise<DockerComposeCLI>;
dockerEnv: NodeJS.ProcessEnv;
Expand Down
10 changes: 6 additions & 4 deletions src/spec-shutdown/dockerUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export interface ContainerDetails {
export interface DockerCLIParameters {
cliHost: CLIHost;
dockerCLI: string;
runtimeArgs?: string[];
dockerComposeCLI: () => Promise<DockerComposeCLI>;
env: NodeJS.ProcessEnv;
output: Log;
Expand Down Expand Up @@ -77,6 +78,7 @@ export interface PartialPtyExecParameters {

interface DockerResolverParameters {
dockerCLI: string;
runtimeArgs?: string[];
cliVariant: CLIVariant;
dockerComposeCLI: () => Promise<DockerComposeCLI>;
dockerEnv: NodeJS.ProcessEnv;
Expand Down Expand Up @@ -423,13 +425,13 @@ export function toExecParameters(params: DockerCLIParameters | PartialExecParame
return 'dockerEnv' in params ? {
exec: params.common.cliHost.exec,
cmd: compose ? compose.cmd : params.dockerCLI,
args: compose ? compose.args : [],
args: compose ? compose.args : params.runtimeArgs || [],
env: params.dockerEnv,
output: params.common.output,
} : 'cliHost' in params ? {
exec: params.cliHost.exec,
cmd: compose ? compose.cmd : params.dockerCLI,
args: compose ? compose.args : [],
args: compose ? compose.args : params.runtimeArgs || [],
env: params.env,
output: params.output,
} : {
Expand All @@ -443,14 +445,14 @@ export function toPtyExecParameters(params: DockerCLIParameters | PartialPtyExec
ptyExec: params.common.cliHost.ptyExec,
exec: params.common.cliHost.exec,
cmd: compose ? compose.cmd : params.dockerCLI,
args: compose ? compose.args : [],
args: compose ? compose.args : params.runtimeArgs || [],
env: params.dockerEnv,
output: params.common.output,
} : 'cliHost' in params ? {
ptyExec: params.cliHost.ptyExec,
exec: params.cliHost.exec,
cmd: compose ? compose.cmd : params.dockerCLI,
args: compose ? compose.args : [],
args: compose ? compose.args : params.runtimeArgs || [],
env: params.env,
output: params.output,
} : {
Expand Down
Loading