Dagger.Container (dagger v0.18.3)

View Source

An OCI-compatible container, also known as a Docker container.

Summary

Functions

Turn the container into a Service.

Package the container state as an OCI image, and return it as a tar archive

Initializes this container from a Dockerfile build.

Return the container's default arguments.

Retrieve a directory from the container's root filesystem

Return the container's OCI entrypoint.

Retrieves the value of the specified environment variable.

Retrieves the list of environment variables passed to commands.

The exit code of the last executed command

EXPERIMENTAL API! Subject to change/removal at any time.

EXPERIMENTAL API! Subject to change/removal at any time.

Writes the container as an OCI tarball to the destination file path on the host.

Retrieves the list of exposed ports.

Retrieves a file at the given path.

Download a container image, and apply it to the container state. All previous state will be lost.

A unique identifier for this Container.

The unique image reference which can only be retrieved immediately after the 'Container.From' call.

Reads the container from an OCI tarball.

Retrieves the value of the specified label.

Retrieves the list of labels passed to container.

Retrieves the list of paths where a directory is mounted.

The platform this container executes and publishes as.

Package the container state as an OCI image, and publish it to a registry

Return a snapshot of the container's root filesystem. The snapshot can be modified then written back using withRootfs. Use that method for filesystem modifications.

The buffered standard error stream of the last executed command

The buffered standard output stream of the last executed command

Forces evaluation of the pipeline in the engine.

Opens an interactive terminal for this container using its configured default terminal command if not overridden by args (or sh as a fallback default).

Starts a Service and creates a tunnel that forwards traffic from the caller's network to that service.

Retrieves the user to be set for all commands.

Retrieves this container plus the given OCI anotation.

Configures default arguments for future commands. Like CMD in Dockerfile.

Set the default command to invoke for the container's terminal API.

Return a new container snapshot, with a directory added to its filesystem

Set an OCI-style entrypoint. It will be included in the container's OCI configuration. Note, withExec ignores the entrypoint by default.

Set a new environment variable in the container.

Execute a command in the container, and return a new snapshot of the container state after execution.

Expose a network port. Like EXPOSE in Dockerfile (but with healthcheck support)

Return a container snapshot with a file added

Retrieves this container plus the contents of the given files copied to the given path.

Retrieves this container plus the given label.

Retrieves this container plus a cache volume mounted at the given path.

Retrieves this container plus a directory mounted at the given path.

Retrieves this container plus a file mounted at the given path.

Retrieves this container plus a secret mounted into a file at the given path.

Retrieves this container plus a temporary directory mounted at the given path. Any writes will be ephemeral to a single withExec call; they will not be persisted to subsequent withExecs.

Return a new container snapshot, with a file added to its filesystem

Attach credentials for future publishing to a registry. Use in combination with publish

Change the container's root filesystem. The previous root filesystem will be lost.

Set a new environment variable, using a secret value

Establish a runtime dependency on a from a container to a network service.

Retrieves this container plus a socket forwarded to the given Unix socket path.

Retrieves this container with a different command user.

Change the container's working directory. Like WORKDIR in Dockerfile.

Retrieves this container minus the given OCI annotation.

Remove the container's default arguments.

Return a new container snapshot, with a directory removed from its filesystem

Reset the container's OCI entrypoint.

Retrieves this container minus the given environment variable.

Retrieves this container with the file at the given path removed.

Return a new container spanshot with specified files removed

Retrieves this container minus the given environment label.

Retrieves this container after unmounting everything at the given path.

Retrieves this container without the registry authentication of a given address.

Retrieves this container minus the given environment variable containing the secret.

Retrieves this container with a previously added Unix socket removed.

Retrieves this container with an unset command user.

Unset the container's working directory.

Retrieves the working directory for all commands.

Types

t()

@type t() :: %Dagger.Container{client: term(), query_builder: term()}

Functions

as_service(container, optional_args \\ [])

@spec as_service(t(),
  args: [String.t()],
  use_entrypoint: boolean() | nil,
  experimental_privileged_nesting: boolean() | nil,
  insecure_root_capabilities: boolean() | nil,
  expand: boolean() | nil,
  no_init: boolean() | nil
) :: Dagger.Service.t()

Turn the container into a Service.

Be sure to set any exposed ports before this conversion.

as_tarball(container, optional_args \\ [])

@spec as_tarball(t(),
  platform_variants: [Dagger.ContainerID.t()],
  forced_compression: Dagger.ImageLayerCompression.t() | nil,
  media_types: Dagger.ImageMediaTypes.t() | nil
) :: Dagger.File.t()

Package the container state as an OCI image, and return it as a tar archive

build(container, context, optional_args \\ [])

@spec build(t(), Dagger.Directory.t(),
  dockerfile: String.t() | nil,
  target: String.t() | nil,
  build_args: [Dagger.BuildArg.t()],
  secrets: [Dagger.SecretID.t()],
  no_init: boolean() | nil
) :: t()

Initializes this container from a Dockerfile build.

default_args(container)

@spec default_args(t()) :: {:ok, [String.t()]} | {:error, term()}

Return the container's default arguments.

directory(container, path, optional_args \\ [])

@spec directory(t(), String.t(), [{:expand, boolean() | nil}]) :: Dagger.Directory.t()

Retrieve a directory from the container's root filesystem

Mounts are included.

entrypoint(container)

@spec entrypoint(t()) :: {:ok, [String.t()]} | {:error, term()}

Return the container's OCI entrypoint.

env_variable(container, name)

@spec env_variable(t(), String.t()) :: {:ok, String.t() | nil} | {:error, term()}

Retrieves the value of the specified environment variable.

env_variables(container)

@spec env_variables(t()) :: {:ok, [Dagger.EnvVariable.t()]} | {:error, term()}

Retrieves the list of environment variables passed to commands.

exit_code(container)

@spec exit_code(t()) :: {:ok, integer()} | {:error, term()}

The exit code of the last executed command

Returns an error if no command was executed

experimental_with_all_gpus(container)

@spec experimental_with_all_gpus(t()) :: t()

EXPERIMENTAL API! Subject to change/removal at any time.

Configures all available GPUs on the host to be accessible to this container.

This currently works for Nvidia devices only.

experimental_with_gpu(container, devices)

@spec experimental_with_gpu(t(), [String.t()]) :: t()

EXPERIMENTAL API! Subject to change/removal at any time.

Configures the provided list of devices to be accessible to this container.

This currently works for Nvidia devices only.

export(container, path, optional_args \\ [])

@spec export(t(), String.t(),
  platform_variants: [Dagger.ContainerID.t()],
  forced_compression: Dagger.ImageLayerCompression.t() | nil,
  media_types: Dagger.ImageMediaTypes.t() | nil,
  expand: boolean() | nil
) :: {:ok, String.t()} | {:error, term()}

Writes the container as an OCI tarball to the destination file path on the host.

It can also export platform variants.

exposed_ports(container)

@spec exposed_ports(t()) :: {:ok, [Dagger.Port.t()]} | {:error, term()}

Retrieves the list of exposed ports.

This includes ports already exposed by the image, even if not explicitly added with dagger.

file(container, path, optional_args \\ [])

@spec file(t(), String.t(), [{:expand, boolean() | nil}]) :: Dagger.File.t()

Retrieves a file at the given path.

Mounts are included.

from(container, address)

@spec from(t(), String.t()) :: t()

Download a container image, and apply it to the container state. All previous state will be lost.

id(container)

@spec id(t()) :: {:ok, Dagger.ContainerID.t()} | {:error, term()}

A unique identifier for this Container.

image_ref(container)

@spec image_ref(t()) :: {:ok, String.t()} | {:error, term()}

The unique image reference which can only be retrieved immediately after the 'Container.From' call.

import(container, source, optional_args \\ [])

@spec import(t(), Dagger.File.t(), [{:tag, String.t() | nil}]) :: t()

Reads the container from an OCI tarball.

label(container, name)

@spec label(t(), String.t()) :: {:ok, String.t() | nil} | {:error, term()}

Retrieves the value of the specified label.

labels(container)

@spec labels(t()) :: {:ok, [Dagger.Label.t()]} | {:error, term()}

Retrieves the list of labels passed to container.

mounts(container)

@spec mounts(t()) :: {:ok, [String.t()]} | {:error, term()}

Retrieves the list of paths where a directory is mounted.

platform(container)

@spec platform(t()) :: {:ok, Dagger.Platform.t()} | {:error, term()}

The platform this container executes and publishes as.

publish(container, address, optional_args \\ [])

@spec publish(t(), String.t(),
  platform_variants: [Dagger.ContainerID.t()],
  forced_compression: Dagger.ImageLayerCompression.t() | nil,
  media_types: Dagger.ImageMediaTypes.t() | nil
) :: {:ok, String.t()} | {:error, term()}

Package the container state as an OCI image, and publish it to a registry

Returns the fully qualified address of the published image, with digest

rootfs(container)

@spec rootfs(t()) :: Dagger.Directory.t()

Return a snapshot of the container's root filesystem. The snapshot can be modified then written back using withRootfs. Use that method for filesystem modifications.

stderr(container)

@spec stderr(t()) :: {:ok, String.t()} | {:error, term()}

The buffered standard error stream of the last executed command

Returns an error if no command was executed

stdout(container)

@spec stdout(t()) :: {:ok, String.t()} | {:error, term()}

The buffered standard output stream of the last executed command

Returns an error if no command was executed

sync(container)

@spec sync(t()) :: {:ok, t()} | {:error, term()}

Forces evaluation of the pipeline in the engine.

It doesn't run the default command if no exec has been set.

terminal(container, optional_args \\ [])

@spec terminal(t(),
  cmd: [String.t()],
  experimental_privileged_nesting: boolean() | nil,
  insecure_root_capabilities: boolean() | nil
) :: t()

Opens an interactive terminal for this container using its configured default terminal command if not overridden by args (or sh as a fallback default).

up(container, optional_args \\ [])

@spec up(t(),
  ports: [Dagger.PortForward.t()],
  random: boolean() | nil,
  args: [String.t()],
  use_entrypoint: boolean() | nil,
  experimental_privileged_nesting: boolean() | nil,
  insecure_root_capabilities: boolean() | nil,
  expand: boolean() | nil,
  no_init: boolean() | nil
) :: :ok | {:error, term()}

Starts a Service and creates a tunnel that forwards traffic from the caller's network to that service.

Be sure to set any exposed ports before calling this api.

user(container)

@spec user(t()) :: {:ok, String.t()} | {:error, term()}

Retrieves the user to be set for all commands.

with_annotation(container, name, value)

@spec with_annotation(t(), String.t(), String.t()) :: t()

Retrieves this container plus the given OCI anotation.

with_default_args(container, args)

@spec with_default_args(t(), [String.t()]) :: t()

Configures default arguments for future commands. Like CMD in Dockerfile.

with_default_terminal_cmd(container, args, optional_args \\ [])

@spec with_default_terminal_cmd(
  t(),
  [String.t()],
  experimental_privileged_nesting: boolean() | nil,
  insecure_root_capabilities: boolean() | nil
) :: t()

Set the default command to invoke for the container's terminal API.

with_directory(container, path, directory, optional_args \\ [])

@spec with_directory(t(), String.t(), Dagger.Directory.t(),
  exclude: [String.t()],
  include: [String.t()],
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Return a new container snapshot, with a directory added to its filesystem

with_entrypoint(container, args, optional_args \\ [])

@spec with_entrypoint(t(), [String.t()], [{:keep_default_args, boolean() | nil}]) ::
  t()

Set an OCI-style entrypoint. It will be included in the container's OCI configuration. Note, withExec ignores the entrypoint by default.

with_env_variable(container, name, value, optional_args \\ [])

@spec with_env_variable(t(), String.t(), String.t(), [{:expand, boolean() | nil}]) ::
  t()

Set a new environment variable in the container.

with_exec(container, args, optional_args \\ [])

@spec with_exec(
  t(),
  [String.t()],
  use_entrypoint: boolean() | nil,
  stdin: String.t() | nil,
  redirect_stdout: String.t() | nil,
  redirect_stderr: String.t() | nil,
  expect: Dagger.ReturnType.t() | nil,
  experimental_privileged_nesting: boolean() | nil,
  insecure_root_capabilities: boolean() | nil,
  expand: boolean() | nil,
  no_init: boolean() | nil
) :: t()

Execute a command in the container, and return a new snapshot of the container state after execution.

with_exposed_port(container, port, optional_args \\ [])

@spec with_exposed_port(t(), integer(),
  protocol: Dagger.NetworkProtocol.t() | nil,
  description: String.t() | nil,
  experimental_skip_healthcheck: boolean() | nil
) :: t()

Expose a network port. Like EXPOSE in Dockerfile (but with healthcheck support)

Exposed ports serve two purposes:

  • For health checks and introspection, when running services

  • For setting the EXPOSE OCI field when publishing the container

with_file(container, path, source, optional_args \\ [])

@spec with_file(t(), String.t(), Dagger.File.t(),
  permissions: integer() | nil,
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Return a container snapshot with a file added

with_files(container, path, sources, optional_args \\ [])

@spec with_files(t(), String.t(), [Dagger.FileID.t()],
  permissions: integer() | nil,
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Retrieves this container plus the contents of the given files copied to the given path.

with_label(container, name, value)

@spec with_label(t(), String.t(), String.t()) :: t()

Retrieves this container plus the given label.

with_mounted_cache(container, path, cache, optional_args \\ [])

@spec with_mounted_cache(t(), String.t(), Dagger.CacheVolume.t(),
  source: Dagger.DirectoryID.t() | nil,
  sharing: Dagger.CacheSharingMode.t() | nil,
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Retrieves this container plus a cache volume mounted at the given path.

with_mounted_directory(container, path, source, optional_args \\ [])

@spec with_mounted_directory(t(), String.t(), Dagger.Directory.t(),
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Retrieves this container plus a directory mounted at the given path.

with_mounted_file(container, path, source, optional_args \\ [])

@spec with_mounted_file(t(), String.t(), Dagger.File.t(),
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Retrieves this container plus a file mounted at the given path.

with_mounted_secret(container, path, source, optional_args \\ [])

@spec with_mounted_secret(t(), String.t(), Dagger.Secret.t(),
  owner: String.t() | nil,
  mode: integer() | nil,
  expand: boolean() | nil
) :: t()

Retrieves this container plus a secret mounted into a file at the given path.

with_mounted_temp(container, path, optional_args \\ [])

@spec with_mounted_temp(t(), String.t(),
  size: integer() | nil,
  expand: boolean() | nil
) :: t()

Retrieves this container plus a temporary directory mounted at the given path. Any writes will be ephemeral to a single withExec call; they will not be persisted to subsequent withExecs.

with_new_file(container, path, contents, optional_args \\ [])

@spec with_new_file(t(), String.t(), String.t(),
  permissions: integer() | nil,
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Return a new container snapshot, with a file added to its filesystem

with_registry_auth(container, address, username, secret)

@spec with_registry_auth(t(), String.t(), String.t(), Dagger.Secret.t()) :: t()

Attach credentials for future publishing to a registry. Use in combination with publish

with_rootfs(container, directory)

@spec with_rootfs(t(), Dagger.Directory.t()) :: t()

Change the container's root filesystem. The previous root filesystem will be lost.

with_secret_variable(container, name, secret)

@spec with_secret_variable(t(), String.t(), Dagger.Secret.t()) :: t()

Set a new environment variable, using a secret value

with_service_binding(container, alias, service)

@spec with_service_binding(t(), String.t(), Dagger.Service.t()) :: t()

Establish a runtime dependency on a from a container to a network service.

The service will be started automatically when needed and detached when it is no longer needed, executing the default command if none is set.

The service will be reachable from the container via the provided hostname alias.

The service dependency will also convey to any files or directories produced by the container.

with_unix_socket(container, path, source, optional_args \\ [])

@spec with_unix_socket(t(), String.t(), Dagger.Socket.t(),
  owner: String.t() | nil,
  expand: boolean() | nil
) :: t()

Retrieves this container plus a socket forwarded to the given Unix socket path.

with_user(container, name)

@spec with_user(t(), String.t()) :: t()

Retrieves this container with a different command user.

with_workdir(container, path, optional_args \\ [])

@spec with_workdir(t(), String.t(), [{:expand, boolean() | nil}]) :: t()

Change the container's working directory. Like WORKDIR in Dockerfile.

without_annotation(container, name)

@spec without_annotation(t(), String.t()) :: t()

Retrieves this container minus the given OCI annotation.

without_default_args(container)

@spec without_default_args(t()) :: t()

Remove the container's default arguments.

without_directory(container, path, optional_args \\ [])

@spec without_directory(t(), String.t(), [{:expand, boolean() | nil}]) :: t()

Return a new container snapshot, with a directory removed from its filesystem

without_entrypoint(container, optional_args \\ [])

@spec without_entrypoint(t(), [{:keep_default_args, boolean() | nil}]) :: t()

Reset the container's OCI entrypoint.

without_env_variable(container, name)

@spec without_env_variable(t(), String.t()) :: t()

Retrieves this container minus the given environment variable.

without_exposed_port(container, port, optional_args \\ [])

@spec without_exposed_port(t(), integer(), [
  {:protocol, Dagger.NetworkProtocol.t() | nil}
]) :: t()

Unexpose a previously exposed port.

without_file(container, path, optional_args \\ [])

@spec without_file(t(), String.t(), [{:expand, boolean() | nil}]) :: t()

Retrieves this container with the file at the given path removed.

without_files(container, paths, optional_args \\ [])

@spec without_files(t(), [String.t()], [{:expand, boolean() | nil}]) :: t()

Return a new container spanshot with specified files removed

without_label(container, name)

@spec without_label(t(), String.t()) :: t()

Retrieves this container minus the given environment label.

without_mount(container, path, optional_args \\ [])

@spec without_mount(t(), String.t(), [{:expand, boolean() | nil}]) :: t()

Retrieves this container after unmounting everything at the given path.

without_registry_auth(container, address)

@spec without_registry_auth(t(), String.t()) :: t()

Retrieves this container without the registry authentication of a given address.

without_secret_variable(container, name)

@spec without_secret_variable(t(), String.t()) :: t()

Retrieves this container minus the given environment variable containing the secret.

without_unix_socket(container, path, optional_args \\ [])

@spec without_unix_socket(t(), String.t(), [{:expand, boolean() | nil}]) :: t()

Retrieves this container with a previously added Unix socket removed.

without_user(container)

@spec without_user(t()) :: t()

Retrieves this container with an unset command user.

Should default to root.

without_workdir(container)

@spec without_workdir(t()) :: t()

Unset the container's working directory.

Should default to "/".

workdir(container)

@spec workdir(t()) :: {:ok, String.t()} | {:error, term()}

Retrieves the working directory for all commands.