# Multi-stage build for Nushell (nu) from source on Ubuntu Jammy
FROM ubuntu:jammy-20260312 AS builder
# Install build dependencies
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
curl \
git \
build-essential \
clang \
pkg-config \
libsqlite3-dev \
openssl \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Rust toolchain 1.92.0 (per Cargo.toml rust-version)
ENV RUSTUP_HOME=/root/.rustup \
CARGO_HOME=/root/.cargo \
PATH=/root/.cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.92.0
WORKDIR /workspace
# Copy source and build
COPY . .
RUN cargo build --workspace --release --locked
FROM ubuntu:jammy-20260312 AS runtime
# Runtime dependencies (minimal)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
libsqlite3-0 \
libssl3 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /workspace/target/release/nu /usr/local/bin/nu
RUN chmod +x /usr/local/bin/nu
ENTRYPOINT ["/usr/local/bin/nu"]
# Multi-stage build for Nushell (nu) from source on Ubuntu Jammy
FROM ubuntu:22.04 AS builder
# Install build dependencies
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
curl \
git \
build-essential \
clang \
pkg-config \
libsqlite3-dev \
openssl \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Rust toolchain 1.92.0 (per Cargo.toml rust-version)
ENV RUSTUP_HOME=/root/.rustup \
CARGO_HOME=/root/.cargo \
PATH=/root/.cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.92.0
WORKDIR /workspace
# Copy source and build
COPY . .
RUN cargo build --workspace --release --locked
FROM ubuntu:22.04 AS runtime
# Runtime dependencies (minimal)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
libsqlite3-0 \
libssl3 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /workspace/target/release/nu /usr/local/bin/nu
RUN chmod +x /usr/local/bin/nu
ENTRYPOINT ["/usr/local/bin/nu"]
# Ignore Dockerfile outputs and CI configs .git node_modules target Cargo.lock .crate venv *.log *.tmp .DS_Store
- Exact error message and exit code
- error: the lock file /workspace/Cargo.lock needs to be updated but --locked was passed to prevent this
- exit code: 101
- Failing command/step
- Failing step: [builder 6/6] RUN cargo build --workspace --release --locked
- Dockerfile reference: Dockerfile:29
- Missing packages or files mentioned
- No system packages or files were reported missing as part of the error. The only file path mentioned is the lockfile:
- /workspace/Cargo.lock (needs updating)
- Version mismatch info
- Observed Rust toolchain details in the log:
- rustup installs 1.92.0-x86_64-unknown-linux-gnu; rustc 1.92.0 (ded5c06cf 2025-12-08)
- Toolchain appears to be 1.92.0, with no explicit version mismatch stated in the error
- Note in log: If you want to generate the lockfile without network, remove --locked and use --offline instead
- Quick fix suggestions
- Remove --locked to allow Cargo.lock to update (or run cargo generate-lockfile beforehand)
- Ensure Cargo.lock is up to date before building in CI/Docker
- If building offline is intended, use cargo build --workspace --release --offline (after generating/updating the lockfile)Image ubuntu:jammy-20260312 NOT found on Docker Hub.
Image ubuntu:22.04 exists on Docker Hub.
Image ubuntu:jammy exists on Docker Hub.
# Multi-stage build for Nushell (nu) from source on Ubuntu Jammy
FROM ubuntu:22.04 AS builder
# Install build dependencies
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
curl \
git \
build-essential \
clang \
pkg-config \
libsqlite3-dev \
openssl \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Rust toolchain 1.92.0 (per Cargo.toml rust-version)
ENV RUSTUP_HOME=/root/.rustup \
CARGO_HOME=/root/.cargo \
PATH=/root/.cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.92.0
WORKDIR /workspace
# Copy source and build
COPY . .
# Ensure lockfile can be updated if necessary (remove --locked for Docker builds)
RUN cargo build --workspace --release
FROM ubuntu:22.04 AS runtime
# Runtime dependencies (minimal)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
libsqlite3-0 \
libssl1.1 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /workspace/target/release/nu /usr/local/bin/nu
RUN chmod +x /usr/local/bin/nu
ENTRYPOINT ["/usr/local/bin/nu"]
Summary (under 1500 chars):
- VerifyBuild status: build_failed
- Key concerns
- Runtime stage installs libssl1.1, not available on Ubuntu 22.04 (Jammy). Use libssl3 or ensure the binary links against libs present in runtime.
- No .dockerignore shown; adding one (e.g., exclude target/, .cargo/) could speed builds and reduce context size.
- Ensure the runtime image provides all dynamic deps (e.g., libsqlite3-0 and correct OpenSSL libs) for Nushell; otherwise the container may fail at runtime.
- Build error
- Failing command/step: [runtime 2/4] RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates libsqlite3-0 libssl1.1 && rm -rf /var/lib/apt/lists/*
- Exact error and exit code: The build failed with: failed to build: failed to solve: process "/bin/sh -c apt-get update && apt-get install -y --no-install-recommends ca-certificates libsqlite3-0 libssl1.1 && rm -rf /var/lib/apt/lists/*" did not complete successfully: exit code: 100
- apt output during the failure:
- E: Unable to locate package libssl1.1
- E: Couldn't find any package by glob 'libssl1.1'
- E: Couldn't find any package by regex 'libssl1.1'
- Missing/causing issue
- libssl1.1 is missing/not located in Ubuntu 22.04 jammy repos; jammy uses libssl3.
- Context
- Dockerfile is based on Ubuntu 22.04 (jammy); libssl1.1 not available in jammy's repositories, so apt install fails (exit code 100).
- Relevant Dockerfile snippet (failing step)
- Dockerfile:36
35 | # Runtime dependencies (minimal)
36 | >>> RUN apt-get update \
37 | >>> && apt-get install -y --no-install-recommends \
38 | >>> ca-certificates \
39 | >>> libsqlite3-0 \
40 | >>> libssl1.1 \
41 | >>> && rm -rf /var/lib/apt/lists/*# Multi-stage build for Nushell (nu) from source on Ubuntu Jammy
FROM ubuntu:22.04 AS builder
# Install build dependencies
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
curl \
git \
build-essential \
clang \
pkg-config \
libsqlite3-dev \
openssl \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Rust toolchain 1.92.0 (per Cargo.toml rust-version)
ENV RUSTUP_HOME=/root/.rustup \
CARGO_HOME=/root/.cargo \
PATH=/root/.cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.92.0
WORKDIR /workspace
# Copy source and build
COPY . .
# Ensure lockfile can be updated if necessary (remove --locked for Docker builds)
RUN cargo build --workspace --release
FROM ubuntu:22.04 AS runtime
# Runtime dependencies (minimal)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
libsqlite3-0 \
libssl3 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /workspace/target/release/nu /usr/local/bin/nu
RUN chmod +x /usr/local/bin/nu
ENTRYPOINT ["/usr/local/bin/nu"]
Build timed out after 600s
# Multi-stage build for Nushell (nu) from source on Ubuntu Jammy
FROM ubuntu:22.04 AS builder
# Install build dependencies
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
curl \
git \
build-essential \
clang \
pkg-config \
libsqlite3-dev \
openssl \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Rust toolchain 1.92.0 (per Cargo.toml rust-version)
ENV RUSTUP_HOME=/root/.rustup \
CARGO_HOME=/root/.cargo \
PATH=/root/.cargo/bin:$PATH
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.92.0
WORKDIR /workspace
# Copy source and build
COPY . .
# Build the nushell binary specifically to speed up the build
RUN cargo build -p nu --release
FROM ubuntu:22.04 AS runtime
# Runtime dependencies (minimal)
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
libsqlite3-0 \
libssl3 \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /workspace/target/release/nu /usr/local/bin/nu
RUN chmod +x /usr/local/bin/nu
ENTRYPOINT ["/usr/local/bin/nu"]
Concerns: No non-root user defined; container runs as root by default which has security implications., Smoke tests rely on common CLI flags (e.g., --version, --help); if Nushell changes CLI args in the future, tests may fail., COPY . . copies the entire repo into the build context; consider restricting to necessary files (e.g., specific crates) to speed up builds and reduce context size. Smoke [PASS]: test -x /usr/local/bin/nu Smoke [PASS]: /usr/local/bin/nu --version Smoke [PASS]: /usr/local/bin/nu --help | head -n 1