import { ExecuteGoal } from "../../../api/goal/GoalInvocation";
import { Container, ContainerRegistration, ContainerScheduler, GoalContainer } from "./container";
/**
 * Extension to GoalContainer to specify additional docker options
 */
export declare type DockerGoalContainer = GoalContainer & {
    dockerOptions?: string[];
};
/**
 * Additional options for Docker CLI implementation of container goals.
 */
export interface DockerContainerRegistration extends ContainerRegistration {
    /**
     * Containers to run for this goal.  The goal result is based on
     * the exit status of the first element of the `containers` array.
     * The other containers are considered "sidecar" containers
     * provided functionality that the main container needs to
     * function.  The working directory of the first container is set
     * to [[ContainerProjectHome]], which contains the project upon
     * which the goal should operate.
     *
     * This extends the base containers property to be able to pass
     * additional dockerOptions to a single container, eg.
     * '--link=mongo:mongo'.
     */
    containers: DockerGoalContainer[];
    /**
     * Additional Docker CLI command-line options.  Command-line
     * options provided here will be appended to the default set of
     * options used when executing `docker run`.  For example, if your
     * main container must run in its default working directory, you
     * can include `"--workdir="` in the `dockerOptions` array.
     */
    dockerOptions?: string[];
}
export declare const dockerContainerScheduler: ContainerScheduler;
/**
 * Execute container goal using Docker CLI.  Wait on completion of
 * first container, then kill all the rest.
 */
export declare function executeDockerJob(goal: Container, registration: DockerContainerRegistration): ExecuteGoal;
/**
 * Generate container specific Docker command-line options.
 *
 * @param container Goal container spec
 * @param registration Container goal registration object
 * @return Docker command-line entrypoint, env, p, and volume options
 */
export declare function containerDockerOptions(container: GoalContainer, registration: ContainerRegistration): string[];
/**
 * Use a temporary under the home directory so Docker can use it as a
 * volume mount.
 */
export declare function dockerTmpDir(): string;
//# sourceMappingURL=docker.d.ts.map