[ { "id": "sbd-0001", "title": "Python image forgets requirements.txt", "summary": "The Dockerfile installs from requirements.txt before that file exists inside the build context layer.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "build-context", "pip" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY app.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"app.py\"]" ] }, { "path": "requirements.txt", "content": [ "flask==3.0.3" ] }, { "path": "app.py", "content": [ "from flask import Flask", "", "app = Flask(__name__)", "", "@app.get(\"/\")", "def home():", " return {\"status\": \"ok\"}", "", "if __name__ == \"__main__\":", " app.run(host=\"0.0.0.0\", port=8080)" ] } ], "failure_log": [ "Step 4/5 : RUN pip install --no-cache-dir -r requirements.txt", "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0001 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0001 ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "-COPY app.py .", "+COPY requirements.txt .", " RUN pip install --no-cache-dir -r requirements.txt", "+COPY app.py .", " CMD [\"python\", \"app.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0002", "title": "Node image uses npm ci without a lockfile", "summary": "The project has only package.json, but the Dockerfile uses npm ci, which requires a package-lock.json or npm-shrinkwrap.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY index.js .", "CMD [\"node\", \"index.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node index.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "index.js", "content": [ "const express = require('express');", "const app = express();", "app.get('/', (_req, res) => res.json({status: 'ok'}));", "app.listen(3000, '0.0.0.0');" ] } ], "failure_log": [ "npm ERR! code EUSAGE", "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0002 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0002 ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY index.js .", " CMD [\"node\", \"index.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0003", "title": "Go multi-stage build copies the wrong binary", "summary": "The builder stage writes /out/server, but the runtime stage tries to copy and execute /out/api.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "copy" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod ./", "COPY main.go ./", "RUN go build -o /out/server ./...", "FROM alpine:3.20", "COPY --from=build /out/api /usr/local/bin/api", "CMD [\"api\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd0003", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "import \"fmt\"", "", "func main() {", " fmt.Println(\"ok\")", "}" ] } ], "failure_log": [ "failed to solve: failed to compute cache key: failed to calculate checksum of ref: \"/out/api\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0003 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0003 ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,6 +3,6 @@", " COPY go.mod ./", " COPY main.go ./", " RUN go build -o /out/server ./...", " FROM alpine:3.20", "-COPY --from=build /out/api /usr/local/bin/api", "-CMD [\"api\"]", "+COPY --from=build /out/server /usr/local/bin/server", "+CMD [\"server\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/server /usr/local/bin/server" }, { "path": "Dockerfile", "text": "CMD [\"server\"]" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0004", "title": "Compose API starts before Postgres is ready", "summary": "depends_on only controls startup order. The API starts while Postgres is still initializing, so integration tests see connection refused.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "postgres", "healthcheck", "integration-test" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " environment:", " DATABASE_URL: postgres://postgres:postgres@db:5432/postgres", " depends_on:", " - db", " db:", " image: postgres:16-alpine", " environment:", " POSTGRES_PASSWORD: postgres" ] }, { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY app.py .", "CMD [\"python\", \"app.py\"]" ] }, { "path": "app.py", "content": [ "import os", "print(os.environ['DATABASE_URL'])" ] } ], "failure_log": [ "api-1 | psycopg.OperationalError: connection failed: Connection refused", "db-1 | database system is ready to accept connections" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "diff --git a/docker-compose.yml b/docker-compose.yml", "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -1,11 +1,16 @@", " services:", " api:", " build: .", " environment:", " DATABASE_URL: postgres://postgres:postgres@db:5432/postgres", " depends_on:", "- - db", "+ db:", "+ condition: service_healthy", " db:", " image: postgres:16-alpine", " environment:", " POSTGRES_PASSWORD: postgres", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"pg_isready -U postgres\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "pg_isready -U postgres" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0005", "title": ".dockerignore excludes the production dist directory", "summary": "The image is supposed to serve an already-built static site, but .dockerignore removes dist from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "static-site" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY dist/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "dist" ] }, { "path": "dist/index.html", "content": [ "", "ok" ] } ], "failure_log": [ "failed to compute cache key: failed to calculate checksum of ref: \"/dist\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0005 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0005 ." ] }, "oracle_patch": [ "diff --git a/.dockerignore b/.dockerignore", "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-dist" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "dist" } ] }, "split": "seed" }, { "id": "sbd-0006", "title": "Rust Alpine build misses OpenSSL native packages", "summary": "The crate depends on openssl, but the Alpine builder does not install the native headers and pkg-config needed by openssl-sys.", "failure_type": "native_dependency_missing", "ecosystem": "rust", "difficulty": "medium", "tags": [ "dockerfile", "rust", "alpine", "openssl", "native-deps" ], "files": [ { "path": "Dockerfile", "content": [ "FROM rust:1.79-alpine AS build", "WORKDIR /src", "COPY Cargo.toml .", "RUN cargo fetch", "COPY src ./src", "RUN cargo build --release" ] }, { "path": "Cargo.toml", "content": [ "[package]", "name = \"sbd0006\"", "version = \"0.1.0\"", "edition = \"2021\"", "", "[dependencies]", "openssl = \"0.10\"" ] }, { "path": "src/main.rs", "content": [ "fn main() {", " println!(\"ok\");", "}" ] } ], "failure_log": [ "error: failed to run custom build command for `openssl-sys`", "Could not find directory of OpenSSL installation, and this `-sys` crate cannot proceed without this knowledge." ], "build": { "command": "docker build -t sabnock/sbd-0006 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0006 ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,7 @@", " FROM rust:1.79-alpine AS build", " WORKDIR /src", "+RUN apk add --no-cache musl-dev pkgconfig openssl-dev", " COPY Cargo.toml .", " RUN cargo fetch", " COPY src ./src", " RUN cargo build --release" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache musl-dev pkgconfig openssl-dev" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0007", "title": "Python src layout is not importable in the container", "summary": "The app lives under src/app, but the container runs python -m app without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY requirements.txt .", "RUN pip install --no-cache-dir -r requirements.txt", "COPY src ./src", "CMD [\"python\", \"-m\", \"app\"]" ] }, { "path": "requirements.txt", "content": [] }, { "path": "src/app/__main__.py", "content": [ "print(\"ok\")" ] } ], "failure_log": [ "/usr/local/bin/python: No module named app" ], "build": { "command": "docker build -t sabnock/sbd-0007 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0007 .", "docker run --rm sabnock/sbd-0007" ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,4 +3,5 @@", " COPY requirements.txt .", " RUN pip install --no-cache-dir -r requirements.txt", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"app\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0008", "title": "Poetry install tries to install the app before source files exist", "summary": "The Dockerfile copies only pyproject.toml, then runs poetry install. Poetry attempts to install the root project and fails because package metadata/source files are not present yet.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY service ./service", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"service\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd0008\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"service\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "service/__main__.py", "content": [ "print(\"ok\")" ] } ], "failure_log": [ "Installing the current project: sbd0008 (0.1.0)", "Error: The current project could not be installed: No file/folder found for package service" ], "build": { "command": "docker build -t sabnock/sbd-0008 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0008 ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY service ./service", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"service\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0009", "title": "Compose bind mount hides node_modules from the image", "summary": "The image installs dependencies, but docker compose bind-mounts the host project over /app. On a clean host without node_modules, runtime imports fail.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " web:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY index.js .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node index.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "index.js", "content": [ "require('express')().listen(3000, '0.0.0.0');" ] } ], "failure_log": [ "web-1 | Error: Cannot find module 'express'", "web-1 | Require stack: /app/index.js" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "diff --git a/docker-compose.yml b/docker-compose.yml", "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -3,4 +3,5 @@", " build: .", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0010", "title": "Dockerfile leaks an npm token through ARG and image layers", "summary": "The build uses ARG NPM_TOKEN and writes it to .npmrc in a RUN layer. A secure fix should use BuildKit secrets and remove the temporary .npmrc.", "failure_type": "build_secret_leak", "ecosystem": "node", "difficulty": "hard", "tags": [ "dockerfile", "node", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "ARG NPM_TOKEN", "COPY package*.json ./", "RUN echo \"//registry.npmjs.org/:_authToken=${NPM_TOKEN}\" > .npmrc && npm ci --omit=dev", "COPY index.js .", "CMD [\"node\", \"index.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node index.js\"},\"dependencies\":{\"left-pad\":\"1.3.0\"}}" ] }, { "path": "package-lock.json", "content": [ "{\"name\":\"sbd0010\",\"lockfileVersion\":3,\"packages\":{}}" ] }, { "path": "index.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "hadolint: SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data", "security-scan: token material may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=npm_token,src=.npm-token -t sabnock/sbd-0010 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,7 +1,7 @@", "+# syntax=docker/dockerfile:1.7", " FROM node:22-alpine", " WORKDIR /app", "-ARG NPM_TOKEN", " COPY package*.json ./", "-RUN echo \"//registry.npmjs.org/:_authToken=${NPM_TOKEN}\" > .npmrc && npm ci --omit=dev", "+RUN --mount=type=secret,id=npm_token sh -c 'echo \"//registry.npmjs.org/:_authToken=$(cat /run/secrets/npm_token)\" > .npmrc && npm ci --omit=dev && rm .npmrc'", " COPY index.js .", " CMD [\"node\", \"index.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=npm_token" }, { "path": "Dockerfile", "text": "rm .npmrc" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG NPM_TOKEN" }, { "path": "Dockerfile", "text": "${NPM_TOKEN}" } ] }, "split": "seed" }, { "id": "sbd-0011", "title": "Ubuntu image installs apt packages without apt-get update", "summary": "The package install runs against an image with no fresh package lists, causing apt to fail in a clean build.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y curl ca-certificates", "CMD [\"curl\", \"--version\"]" ] } ], "failure_log": [ "Reading package lists...", "E: Unable to locate package curl", "E: Unable to locate package ca-certificates" ], "build": { "command": "docker build -t sabnock/sbd-0011 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0011 ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y curl ca-certificates", "+RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates && rm -rf /var/lib/apt/lists/*", " CMD [\"curl\", \"--version\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0012", "title": "FastAPI container binds to localhost", "summary": "The app starts inside the container, but Uvicorn binds to 127.0.0.1. Published ports on the host cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "fastapi", "uvicorn", "runtime", "network" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY requirements.txt .", "RUN pip install --no-cache-dir -r requirements.txt", "COPY main.py .", "EXPOSE 8000", "CMD [\"uvicorn\", \"main:app\", \"--host\", \"127.0.0.1\", \"--port\", \"8000\"]" ] }, { "path": "requirements.txt", "content": [ "fastapi==0.111.0", "uvicorn[standard]==0.30.1" ] }, { "path": "main.py", "content": [ "from fastapi import FastAPI", "", "app = FastAPI()", "", "@app.get('/health')", "def health():", " return {'status': 'ok'}" ] } ], "failure_log": [ "curl: (56) Recv failure: Connection reset by peer", "container log: Uvicorn running on http://127.0.0.1:8000" ], "build": { "command": "docker build -t sabnock/sbd-0012 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0012 ." ] }, "oracle_patch": [ "diff --git a/Dockerfile b/Dockerfile", "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -4,4 +4,4 @@", " RUN pip install --no-cache-dir -r requirements.txt", " COPY main.py .", " EXPOSE 8000", "-CMD [\"uvicorn\", \"main:app\", \"--host\", \"127.0.0.1\", \"--port\", \"8000\"]", "+CMD [\"uvicorn\", \"main:app\", \"--host\", \"0.0.0.0\", \"--port\", \"8000\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [] }, "split": "seed" }, { "id": "sbd-0013", "split": "train", "title": "Python api image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY api.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"api.py\"]" ] }, { "path": "requirements.txt", "content": [ "flask==3.0.3" ] }, { "path": "api.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0013 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0013 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY api.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"api.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0014", "split": "train", "title": "Python server image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY server.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"server.py\"]" ] }, { "path": "requirements.txt", "content": [ "fastapi==0.111.0" ] }, { "path": "server.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0014 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0014 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY server.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"server.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0015", "split": "train", "title": "Python worker image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY worker.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"worker.py\"]" ] }, { "path": "requirements.txt", "content": [ "requests==2.32.3" ] }, { "path": "worker.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0015 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0015 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY worker.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"worker.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0016", "split": "train", "title": "Python jobs image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY jobs.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"jobs.py\"]" ] }, { "path": "requirements.txt", "content": [ "httpx==0.27.2" ] }, { "path": "jobs.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0016 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0016 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY jobs.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"jobs.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0017", "split": "train", "title": "Python gateway image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY gateway.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"gateway.py\"]" ] }, { "path": "requirements.txt", "content": [ "starlette==0.37.2" ] }, { "path": "gateway.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0017 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0017 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY gateway.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"gateway.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0018", "split": "train", "title": "Python hooks image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY hooks.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"hooks.py\"]" ] }, { "path": "requirements.txt", "content": [ "pydantic==2.8.2" ] }, { "path": "hooks.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0018 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0018 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY hooks.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"hooks.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0019", "split": "train", "title": "Python tasks image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY tasks.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"tasks.py\"]" ] }, { "path": "requirements.txt", "content": [ "redis==5.0.7" ] }, { "path": "tasks.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0019 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0019 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY tasks.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"tasks.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0020", "split": "train", "title": "Python ingest image misses requirements before pip install", "summary": "The Dockerfile runs pip against requirements.txt before copying that file into the image.", "failure_type": "missing_build_context_file", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "pip", "build-context" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY ingest.py .", "RUN pip install --no-cache-dir -r requirements.txt", "CMD [\"python\", \"ingest.py\"]" ] }, { "path": "requirements.txt", "content": [ "click==8.1.7" ] }, { "path": "ingest.py", "content": [ "print('ok')" ] } ], "failure_log": [ "ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'" ], "build": { "command": "docker build -t sabnock/sbd-0020 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0020 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,5 +1,6 @@", " FROM python:3.12-slim", " WORKDIR /app", "+COPY requirements.txt .", "+RUN pip install --no-cache-dir -r requirements.txt", " COPY ingest.py .", "-RUN pip install --no-cache-dir -r requirements.txt", " CMD [\"python\", \"ingest.py\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "COPY requirements.txt ." } ], "must_not_contain": [] } }, { "id": "sbd-0021", "split": "train", "title": "Node api image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY api.js .", "CMD [\"node\", \"api.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node api.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "api.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0021 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0021 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY api.js .", " CMD [\"node\", \"api.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0022", "split": "train", "title": "Node dashboard image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY dashboard.js .", "CMD [\"node\", \"dashboard.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node dashboard.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "dashboard.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0022 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0022 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY dashboard.js .", " CMD [\"node\", \"dashboard.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0023", "split": "train", "title": "Node worker image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY worker.js .", "CMD [\"node\", \"worker.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node worker.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "worker.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0023 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0023 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY worker.js .", " CMD [\"node\", \"worker.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0024", "split": "train", "title": "Node gateway image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY gateway.js .", "CMD [\"node\", \"gateway.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node gateway.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "gateway.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0024 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0024 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY gateway.js .", " CMD [\"node\", \"gateway.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0025", "split": "train", "title": "Node webhook image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY webhook.js .", "CMD [\"node\", \"webhook.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node webhook.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "webhook.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0025 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0025 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY webhook.js .", " CMD [\"node\", \"webhook.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0026", "split": "train", "title": "Node realtime image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY realtime.js .", "CMD [\"node\", \"realtime.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node realtime.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "realtime.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0026 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0026 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY realtime.js .", " CMD [\"node\", \"realtime.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0027", "split": "train", "title": "Node admin image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY admin.js .", "CMD [\"node\", \"admin.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node admin.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "admin.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0027 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0027 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY admin.js .", " CMD [\"node\", \"admin.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0028", "split": "train", "title": "Node docs image uses npm ci without a lockfile", "summary": "The Dockerfile uses npm ci, but the repository does not include package-lock.json.", "failure_type": "lockfile_missing", "ecosystem": "node", "difficulty": "easy", "tags": [ "dockerfile", "node", "npm", "lockfile" ], "files": [ { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm ci --omit=dev", "COPY docs.js .", "CMD [\"node\", \"docs.js\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node docs.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "docs.js", "content": [ "console.log('ok')" ] } ], "failure_log": [ "npm ERR! The `npm ci` command can only install with an existing package-lock.json or npm-shrinkwrap.json." ], "build": { "command": "docker build -t sabnock/sbd-0028 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0028 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,6 @@", " FROM node:22-alpine", " WORKDIR /app", " COPY package.json .", "-RUN npm ci --omit=dev", "+RUN npm install --omit=dev", " COPY docs.js .", " CMD [\"node\", \"docs.js\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "RUN npm install --omit=dev" } ], "must_not_contain": [] } }, { "id": "sbd-0029", "split": "train", "title": "Go runtime stage copies api but builder emits server", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/server ./...", "FROM alpine:3.20", "COPY --from=build /out/api /usr/local/bin/api", "CMD [\"api\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0029", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/api\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0029 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0029 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/server ./...", " FROM alpine:3.20", "-COPY --from=build /out/api /usr/local/bin/api", "-CMD [\"api\"]", "+COPY --from=build /out/server /usr/local/bin/server", "+CMD [\"server\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/server /usr/local/bin/server" }, { "path": "Dockerfile", "text": "CMD [\"server\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0030", "split": "train", "title": "Go runtime stage copies jobs but builder emits worker", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/worker ./...", "FROM alpine:3.20", "COPY --from=build /out/jobs /usr/local/bin/jobs", "CMD [\"jobs\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0030", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/jobs\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0030 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0030 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/worker ./...", " FROM alpine:3.20", "-COPY --from=build /out/jobs /usr/local/bin/jobs", "-CMD [\"jobs\"]", "+COPY --from=build /out/worker /usr/local/bin/worker", "+CMD [\"worker\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/worker /usr/local/bin/worker" }, { "path": "Dockerfile", "text": "CMD [\"worker\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0031", "split": "train", "title": "Go runtime stage copies edge but builder emits gateway", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/gateway ./...", "FROM alpine:3.20", "COPY --from=build /out/edge /usr/local/bin/edge", "CMD [\"edge\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0031", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/edge\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0031 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0031 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/gateway ./...", " FROM alpine:3.20", "-COPY --from=build /out/edge /usr/local/bin/edge", "-CMD [\"edge\"]", "+COPY --from=build /out/gateway /usr/local/bin/gateway", "+CMD [\"gateway\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/gateway /usr/local/bin/gateway" }, { "path": "Dockerfile", "text": "CMD [\"gateway\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0032", "split": "train", "title": "Go runtime stage copies agent but builder emits collector", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/collector ./...", "FROM alpine:3.20", "COPY --from=build /out/agent /usr/local/bin/agent", "CMD [\"agent\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0032", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/agent\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0032 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0032 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/collector ./...", " FROM alpine:3.20", "-COPY --from=build /out/agent /usr/local/bin/agent", "-CMD [\"agent\"]", "+COPY --from=build /out/collector /usr/local/bin/collector", "+CMD [\"collector\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/collector /usr/local/bin/collector" }, { "path": "Dockerfile", "text": "CMD [\"collector\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0033", "split": "train", "title": "Go runtime stage copies cron but builder emits scheduler", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/scheduler ./...", "FROM alpine:3.20", "COPY --from=build /out/cron /usr/local/bin/cron", "CMD [\"cron\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0033", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/cron\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0033 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0033 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/scheduler ./...", " FROM alpine:3.20", "-COPY --from=build /out/cron /usr/local/bin/cron", "-CMD [\"cron\"]", "+COPY --from=build /out/scheduler /usr/local/bin/scheduler", "+CMD [\"scheduler\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/scheduler /usr/local/bin/scheduler" }, { "path": "Dockerfile", "text": "CMD [\"scheduler\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0034", "split": "train", "title": "Go runtime stage copies proxy but builder emits router", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/router ./...", "FROM alpine:3.20", "COPY --from=build /out/proxy /usr/local/bin/proxy", "CMD [\"proxy\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0034", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/proxy\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0034 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0034 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/router ./...", " FROM alpine:3.20", "-COPY --from=build /out/proxy /usr/local/bin/proxy", "-CMD [\"proxy\"]", "+COPY --from=build /out/router /usr/local/bin/router", "+CMD [\"router\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/router /usr/local/bin/router" }, { "path": "Dockerfile", "text": "CMD [\"router\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0035", "split": "train", "title": "Go runtime stage copies search but builder emits indexer", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/indexer ./...", "FROM alpine:3.20", "COPY --from=build /out/search /usr/local/bin/search", "CMD [\"search\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0035", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/search\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0035 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0035 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/indexer ./...", " FROM alpine:3.20", "-COPY --from=build /out/search /usr/local/bin/search", "-CMD [\"search\"]", "+COPY --from=build /out/indexer /usr/local/bin/indexer", "+CMD [\"indexer\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/indexer /usr/local/bin/indexer" }, { "path": "Dockerfile", "text": "CMD [\"indexer\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0036", "split": "train", "title": "Go runtime stage copies events but builder emits notifier", "summary": "The final image copies a binary name that does not exist in the builder stage.", "failure_type": "multistage_artifact_mismatch", "ecosystem": "go", "difficulty": "easy", "tags": [ "dockerfile", "go", "multi-stage", "artifact" ], "files": [ { "path": "Dockerfile", "content": [ "FROM golang:1.23-alpine AS build", "WORKDIR /src", "COPY go.mod main.go ./", "RUN go build -o /out/notifier ./...", "FROM alpine:3.20", "COPY --from=build /out/events /usr/local/bin/events", "CMD [\"events\"]" ] }, { "path": "go.mod", "content": [ "module example.com/sabnock/sbd-0036", "", "go 1.23" ] }, { "path": "main.go", "content": [ "package main", "", "func main() {}" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out/events\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0036 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0036 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -3,5 +3,5 @@", " COPY go.mod main.go ./", " RUN go build -o /out/notifier ./...", " FROM alpine:3.20", "-COPY --from=build /out/events /usr/local/bin/events", "-CMD [\"events\"]", "+COPY --from=build /out/notifier /usr/local/bin/notifier", "+CMD [\"notifier\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "/out/notifier /usr/local/bin/notifier" }, { "path": "Dockerfile", "text": "CMD [\"notifier\"]" } ], "must_not_contain": [] } }, { "id": "sbd-0037", "split": "train", "title": ".dockerignore excludes dist from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY dist/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "dist" ] }, { "path": "dist/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/dist\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0037 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0037 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-dist" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "dist" } ] } }, { "id": "sbd-0038", "split": "train", "title": ".dockerignore excludes build from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY build/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "build" ] }, { "path": "build/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/build\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0038 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0038 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-build" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "build" } ] } }, { "id": "sbd-0039", "split": "train", "title": ".dockerignore excludes out from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY out/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "out" ] }, { "path": "out/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/out\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0039 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0039 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-out" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "out" } ] } }, { "id": "sbd-0040", "split": "train", "title": ".dockerignore excludes site from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY site/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "site" ] }, { "path": "site/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/site\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0040 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0040 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-site" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "site" } ] } }, { "id": "sbd-0041", "split": "train", "title": ".dockerignore excludes public from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY public/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "public" ] }, { "path": "public/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/public\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0041 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0041 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-public" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "public" } ] } }, { "id": "sbd-0042", "split": "train", "title": ".dockerignore excludes webroot from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY webroot/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "webroot" ] }, { "path": "webroot/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/webroot\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0042 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0042 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-webroot" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "webroot" } ] } }, { "id": "sbd-0043", "split": "train", "title": ".dockerignore excludes release from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY release/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "release" ] }, { "path": "release/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/release\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0043 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0043 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-release" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "release" } ] } }, { "id": "sbd-0044", "split": "train", "title": ".dockerignore excludes static from a static image", "summary": "The Docker build needs a generated static artifact, but .dockerignore removes that directory from the build context.", "failure_type": "dockerignore_artifact_excluded", "ecosystem": "frontend", "difficulty": "easy", "tags": [ "dockerfile", "dockerignore", "nginx", "frontend" ], "files": [ { "path": "Dockerfile", "content": [ "FROM nginx:1.27-alpine", "COPY static/ /usr/share/nginx/html/" ] }, { "path": ".dockerignore", "content": [ "node_modules", "static" ] }, { "path": "static/index.html", "content": [ "ok" ] } ], "failure_log": [ "failed to calculate checksum of ref: \"/static\": not found" ], "build": { "command": "docker build -t sabnock/sbd-0044 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0044 ." ] }, "oracle_patch": [ "--- a/.dockerignore", "+++ b/.dockerignore", "@@ -1,2 +1 @@", " node_modules", "-static" ], "scoring": { "must_touch": [ ".dockerignore" ], "must_contain": [], "must_not_contain": [ { "path": ".dockerignore", "text": "static" } ] } }, { "id": "sbd-0045", "split": "train", "title": "Ubuntu image installs curl without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y curl ca-certificates", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0045 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0045 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y curl ca-certificates", "+RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0046", "split": "train", "title": "Ubuntu image installs git without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y git openssh-client", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0046 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0046 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y git openssh-client", "+RUN apt-get update && apt-get install -y --no-install-recommends git openssh-client && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0047", "split": "train", "title": "Ubuntu image installs python3 without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y python3 python3-pip", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0047 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0047 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y python3 python3-pip", "+RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-pip && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0048", "split": "train", "title": "Ubuntu image installs build-essential without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y build-essential pkg-config", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0048 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0048 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y build-essential pkg-config", "+RUN apt-get update && apt-get install -y --no-install-recommends build-essential pkg-config && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0049", "split": "train", "title": "Ubuntu image installs postgresql-client without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y postgresql-client ca-certificates", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0049 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0049 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y postgresql-client ca-certificates", "+RUN apt-get update && apt-get install -y --no-install-recommends postgresql-client ca-certificates && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0050", "split": "train", "title": "Ubuntu image installs ffmpeg without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y ffmpeg libsm6", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0050 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0050 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y ffmpeg libsm6", "+RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg libsm6 && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0051", "split": "train", "title": "Ubuntu image installs tini without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y tini curl", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0051 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0051 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y tini curl", "+RUN apt-get update && apt-get install -y --no-install-recommends tini curl && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0052", "split": "train", "title": "Ubuntu image installs jq without apt-get update", "summary": "The Dockerfile installs apt packages before refreshing package lists.", "failure_type": "apt_update_missing", "ecosystem": "linux", "difficulty": "easy", "tags": [ "dockerfile", "apt", "ubuntu", "package-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM ubuntu:24.04", "RUN apt-get install -y jq ca-certificates", "CMD [\"true\"]" ] } ], "failure_log": [ "E: Unable to locate package" ], "build": { "command": "docker build -t sabnock/sbd-0052 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0052 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,3 +1,3 @@", " FROM ubuntu:24.04", "-RUN apt-get install -y jq ca-certificates", "+RUN apt-get update && apt-get install -y --no-install-recommends jq ca-certificates && rm -rf /var/lib/apt/lists/*", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apt-get update && apt-get install" }, { "path": "Dockerfile", "text": "rm -rf /var/lib/apt/lists/*" } ], "must_not_contain": [] } }, { "id": "sbd-0053", "split": "train", "title": "fastapi container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 8000", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"8000\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:8000", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0053 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0053 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 8000", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"8000\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"8000\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0054", "split": "train", "title": "flask container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 8080", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"8080\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:8080", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0054 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0054 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 8080", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"8080\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"8080\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0055", "split": "train", "title": "express container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 3000", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"3000\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:3000", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0055 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0055 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 3000", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"3000\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"3000\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0056", "split": "train", "title": "api container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 5000", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"5000\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:5000", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0056 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0056 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 5000", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"5000\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"5000\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0057", "split": "train", "title": "metrics container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 9000", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"9000\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:9000", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0057 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0057 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 9000", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"9000\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"9000\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0058", "split": "train", "title": "worker container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 7000", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"7000\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:7000", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0058 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0058 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 7000", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"7000\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"7000\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0059", "split": "train", "title": "vite container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 5173", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"5173\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:5173", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0059 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0059 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 5173", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"5173\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"5173\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0060", "split": "train", "title": "admin container binds to localhost", "summary": "The service listens on 127.0.0.1 inside the container, so host port publishing cannot reach it.", "failure_type": "container_network_binding", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "network", "runtime", "ports" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY main.py .", "EXPOSE 4200", "CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"4200\"]" ] }, { "path": "main.py", "content": [ "print('ok')" ] } ], "failure_log": [ "service log: listening on http://127.0.0.1:4200", "host probe: connection refused" ], "build": { "command": "docker build -t sabnock/sbd-0060 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0060 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,4 +2,4 @@", " WORKDIR /app", " COPY main.py .", " EXPOSE 4200", "-CMD [\"python\", \"main.py\", \"--host\", \"127.0.0.1\", \"--port\", \"4200\"]", "+CMD [\"python\", \"main.py\", \"--host\", \"0.0.0.0\", \"--port\", \"4200\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "0.0.0.0" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "127.0.0.1" } ] } }, { "id": "sbd-0061", "split": "train", "title": "Compose api starts before postgres is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "postgres", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - postgres", " postgres:", " image: postgres:16-alpine", " environment:", " POSTGRES_PASSWORD: postgres" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "postgres-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,8 +2,14 @@", " api:", " build: .", " depends_on:", "- - postgres", "+ postgres:", "+ condition: service_healthy", " postgres:", " image: postgres:16-alpine", " environment:", " POSTGRES_PASSWORD: postgres", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"pg_isready -U postgres\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "pg_isready -U postgres" } ], "must_not_contain": [] } }, { "id": "sbd-0062", "split": "train", "title": "Compose api starts before redis is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "redis", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - redis", " redis:", " image: redis:7-alpine" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "redis-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,6 +2,12 @@", " api:", " build: .", " depends_on:", "- - redis", "+ redis:", "+ condition: service_healthy", " redis:", " image: redis:7-alpine", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"redis-cli ping\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "redis-cli ping" } ], "must_not_contain": [] } }, { "id": "sbd-0063", "split": "train", "title": "Compose api starts before mysql is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "mysql", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - mysql", " mysql:", " image: mysql:8", " environment:", " MYSQL_ROOT_PASSWORD: mysql" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "mysql-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,8 +2,14 @@", " api:", " build: .", " depends_on:", "- - mysql", "+ mysql:", "+ condition: service_healthy", " mysql:", " image: mysql:8", " environment:", " MYSQL_ROOT_PASSWORD: mysql", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"mysqladmin ping -h localhost\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "mysqladmin ping -h localhost" } ], "must_not_contain": [] } }, { "id": "sbd-0064", "split": "train", "title": "Compose api starts before mongo is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "mongo", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - mongo", " mongo:", " image: mongo:7" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "mongo-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,6 +2,12 @@", " api:", " build: .", " depends_on:", "- - mongo", "+ mongo:", "+ condition: service_healthy", " mongo:", " image: mongo:7", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"mongosh --eval 'db.runCommand({ ping: 1 })'\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "mongosh --eval 'db.runCommand({ ping: 1 })'" } ], "must_not_contain": [] } }, { "id": "sbd-0065", "split": "train", "title": "Compose api starts before rabbit is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "rabbit", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - rabbit", " rabbit:", " image: rabbitmq:3-alpine" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "rabbit-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,6 +2,12 @@", " api:", " build: .", " depends_on:", "- - rabbit", "+ rabbit:", "+ condition: service_healthy", " rabbit:", " image: rabbitmq:3-alpine", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"rabbitmq-diagnostics -q ping\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "rabbitmq-diagnostics -q ping" } ], "must_not_contain": [] } }, { "id": "sbd-0066", "split": "train", "title": "Compose api starts before elastic is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "elastic", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - elastic", " elastic:", " image: elasticsearch:8.14.0", " environment:", " discovery.type: single-node" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "elastic-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,8 +2,14 @@", " api:", " build: .", " depends_on:", "- - elastic", "+ elastic:", "+ condition: service_healthy", " elastic:", " image: elasticsearch:8.14.0", " environment:", " discovery.type: single-node", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"curl -fsS http://localhost:9200 || exit 1\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "curl -fsS http://localhost:9200 || exit 1" } ], "must_not_contain": [] } }, { "id": "sbd-0067", "split": "train", "title": "Compose api starts before minio is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "minio", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - minio", " minio:", " image: minio/minio:RELEASE.2024-07-16T23-46-41Z" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "minio-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,6 +2,12 @@", " api:", " build: .", " depends_on:", "- - minio", "+ minio:", "+ condition: service_healthy", " minio:", " image: minio/minio:RELEASE.2024-07-16T23-46-41Z", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"curl -fsS http://localhost:9000/minio/health/live || exit 1\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "curl -fsS http://localhost:9000/minio/health/live || exit 1" } ], "must_not_contain": [] } }, { "id": "sbd-0068", "split": "train", "title": "Compose api starts before mailhog is healthy", "summary": "depends_on orders container startup but does not wait for service readiness without a healthcheck condition.", "failure_type": "compose_readiness", "ecosystem": "compose", "difficulty": "medium", "tags": [ "compose", "healthcheck", "mailhog", "readiness" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " api:", " build: .", " depends_on:", " - mailhog", " mailhog:", " image: mailhog/mailhog:v1.0.1" ] }, { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "CMD [\"true\"]" ] } ], "failure_log": [ "api-1 | connection refused", "mailhog-1 | service is still starting" ], "build": { "command": "docker compose up --build --abort-on-container-exit" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -2,6 +2,12 @@", " api:", " build: .", " depends_on:", "- - mailhog", "+ mailhog:", "+ condition: service_healthy", " mailhog:", " image: mailhog/mailhog:v1.0.1", "+ healthcheck:", "+ test: [\"CMD-SHELL\", \"wget -q -O- http://localhost:8025 || exit 1\"]", "+ interval: 2s", "+ timeout: 3s", "+ retries: 20" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "condition: service_healthy" }, { "path": "docker-compose.yml", "text": "wget -q -O- http://localhost:8025 || exit 1" } ], "must_not_contain": [] } }, { "id": "sbd-0069", "split": "train", "title": "Compose bind mount hides api node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node api.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "api.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0070", "split": "train", "title": "Compose bind mount hides web node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node web.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "web.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0071", "split": "train", "title": "Compose bind mount hides admin node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node admin.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "admin.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0072", "split": "train", "title": "Compose bind mount hides worker node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node worker.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "worker.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0073", "split": "train", "title": "Compose bind mount hides jobs node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node jobs.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "jobs.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0074", "split": "train", "title": "Compose bind mount hides gateway node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node gateway.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "gateway.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0075", "split": "train", "title": "Compose bind mount hides socket node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node socket.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "socket.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0076", "split": "train", "title": "Compose bind mount hides client node_modules", "summary": "A host bind mount overlays /app and hides dependencies installed into the image.", "failure_type": "compose_bind_mount_masks_dependencies", "ecosystem": "node", "difficulty": "medium", "tags": [ "compose", "node", "bind-mount", "node_modules" ], "files": [ { "path": "docker-compose.yml", "content": [ "services:", " app:", " build: .", " command: npm start", " volumes:", " - .:/app" ] }, { "path": "Dockerfile", "content": [ "FROM node:22-alpine", "WORKDIR /app", "COPY package.json .", "RUN npm install", "COPY . .", "CMD [\"npm\", \"start\"]" ] }, { "path": "package.json", "content": [ "{\"scripts\":{\"start\":\"node client.js\"},\"dependencies\":{\"express\":\"4.19.2\"}}" ] }, { "path": "client.js", "content": [ "console.log(require('express') ? 'ok' : 'bad')" ] } ], "failure_log": [ "Error: Cannot find module 'express'" ], "build": { "command": "docker compose up --build" }, "verify": { "commands": [ "docker compose config --quiet" ] }, "oracle_patch": [ "--- a/docker-compose.yml", "+++ b/docker-compose.yml", "@@ -4,3 +4,4 @@", " command: npm start", " volumes:", " - .:/app", "+ - /app/node_modules" ], "scoring": { "must_touch": [ "docker-compose.yml" ], "must_contain": [ { "path": "docker-compose.yml", "text": "/app/node_modules" } ], "must_not_contain": [] } }, { "id": "sbd-0077", "split": "train", "title": "Python src layout cannot import service", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"service\"]" ] }, { "path": "src/service/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named service" ], "build": { "command": "docker build -t sabnock/sbd-0077 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0077 .", "docker run --rm sabnock/sbd-0077" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"service\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0078", "split": "train", "title": "Python src layout cannot import api", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"api\"]" ] }, { "path": "src/api/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named api" ], "build": { "command": "docker build -t sabnock/sbd-0078 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0078 .", "docker run --rm sabnock/sbd-0078" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"api\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0079", "split": "train", "title": "Python src layout cannot import worker", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"worker\"]" ] }, { "path": "src/worker/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named worker" ], "build": { "command": "docker build -t sabnock/sbd-0079 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0079 .", "docker run --rm sabnock/sbd-0079" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"worker\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0080", "split": "train", "title": "Python src layout cannot import gateway", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"gateway\"]" ] }, { "path": "src/gateway/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named gateway" ], "build": { "command": "docker build -t sabnock/sbd-0080 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0080 .", "docker run --rm sabnock/sbd-0080" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"gateway\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0081", "split": "train", "title": "Python src layout cannot import billing", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"billing\"]" ] }, { "path": "src/billing/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named billing" ], "build": { "command": "docker build -t sabnock/sbd-0081 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0081 .", "docker run --rm sabnock/sbd-0081" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"billing\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0082", "split": "train", "title": "Python src layout cannot import search", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"search\"]" ] }, { "path": "src/search/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named search" ], "build": { "command": "docker build -t sabnock/sbd-0082 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0082 .", "docker run --rm sabnock/sbd-0082" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"search\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0083", "split": "train", "title": "Python src layout cannot import events", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"events\"]" ] }, { "path": "src/events/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named events" ], "build": { "command": "docker build -t sabnock/sbd-0083 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0083 .", "docker run --rm sabnock/sbd-0083" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"events\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0084", "split": "train", "title": "Python src layout cannot import ingest", "summary": "The package is under src, but the runtime command imports it without adding /app/src to PYTHONPATH.", "failure_type": "python_src_layout_import", "ecosystem": "python", "difficulty": "easy", "tags": [ "dockerfile", "python", "src-layout", "runtime" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "COPY src ./src", "CMD [\"python\", \"-m\", \"ingest\"]" ] }, { "path": "src/ingest/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "/usr/local/bin/python: No module named ingest" ], "build": { "command": "docker build -t sabnock/sbd-0084 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0084 .", "docker run --rm sabnock/sbd-0084" ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-slim", " WORKDIR /app", " COPY src ./src", "+ENV PYTHONPATH=/app/src", " CMD [\"python\", \"-m\", \"ingest\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "ENV PYTHONPATH=/app/src" } ], "must_not_contain": [] } }, { "id": "sbd-0085", "split": "validation", "title": "Alpine build misses native packages for openssl", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "openssl" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir openssl", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "openssl-sys" ], "build": { "command": "docker build -t sabnock/sbd-0085 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0085 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache pkgconfig openssl-dev musl-dev", " RUN pip install --no-cache-dir openssl", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache pkgconfig openssl-dev musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0086", "split": "validation", "title": "Alpine build misses native packages for psycopg2", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "psycopg2" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir psycopg2", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "pg_config executable not found" ], "build": { "command": "docker build -t sabnock/sbd-0086 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0086 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache postgresql-dev gcc musl-dev", " RUN pip install --no-cache-dir psycopg2", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache postgresql-dev gcc musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0087", "split": "validation", "title": "Alpine build misses native packages for pillow", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "pillow" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir pillow", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "The headers or library files could not be found for jpeg" ], "build": { "command": "docker build -t sabnock/sbd-0087 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0087 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache jpeg-dev zlib-dev gcc musl-dev", " RUN pip install --no-cache-dir pillow", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache jpeg-dev zlib-dev gcc musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0088", "split": "validation", "title": "Alpine build misses native packages for lxml", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "lxml" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir lxml", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "Please make sure the libxml2 and libxslt development packages are installed" ], "build": { "command": "docker build -t sabnock/sbd-0088 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0088 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache libxml2-dev libxslt-dev gcc musl-dev", " RUN pip install --no-cache-dir lxml", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache libxml2-dev libxslt-dev gcc musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0089", "split": "validation", "title": "Alpine build misses native packages for cryptography", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "cryptography" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir cryptography", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "error: can't find Rust compiler" ], "build": { "command": "docker build -t sabnock/sbd-0089 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0089 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache openssl-dev cargo gcc musl-dev", " RUN pip install --no-cache-dir cryptography", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache openssl-dev cargo gcc musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0090", "split": "validation", "title": "Alpine build misses native packages for mysqlclient", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "mysqlclient" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir mysqlclient", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "mysql_config not found" ], "build": { "command": "docker build -t sabnock/sbd-0090 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0090 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache mariadb-dev gcc musl-dev", " RUN pip install --no-cache-dir mysqlclient", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache mariadb-dev gcc musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0091", "split": "validation", "title": "Alpine build misses native packages for cffi", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "cffi" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir cffi", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "ffi.h: No such file or directory" ], "build": { "command": "docker build -t sabnock/sbd-0091 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0091 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache libffi-dev gcc musl-dev", " RUN pip install --no-cache-dir cffi", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache libffi-dev gcc musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0092", "split": "validation", "title": "Alpine build misses native packages for numpy", "summary": "The package requires system headers or compilers that are absent from the Alpine image.", "failure_type": "native_dependency_missing", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "alpine", "native-deps", "numpy" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-alpine", "WORKDIR /app", "RUN pip install --no-cache-dir numpy", "CMD [\"python\", \"-c\", \"print('ok')\"]" ] } ], "failure_log": [ "Failed building wheel" ], "build": { "command": "docker build -t sabnock/sbd-0092 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0092 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,4 +1,5 @@", " FROM python:3.12-alpine", " WORKDIR /app", "+RUN apk add --no-cache gfortran openblas-dev musl-dev", " RUN pip install --no-cache-dir numpy", " CMD [\"python\", \"-c\", \"print('ok')\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "apk add --no-cache gfortran openblas-dev musl-dev" } ], "must_not_contain": [] } }, { "id": "sbd-0093", "split": "validation", "title": "Dockerfile leaks NPM_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG NPM_TOKEN", "RUN echo \"token=${NPM_TOKEN}\" > .credentials", "RUN wget -q https://registry.npmjs.org -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=npm_token,src=.npm_token -t sabnock/sbd-0093 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG NPM_TOKEN", "-RUN echo \"token=${NPM_TOKEN}\" > .credentials", "-RUN wget -q https://registry.npmjs.org -O /dev/null || true", "+RUN --mount=type=secret,id=npm_token sh -c 'test -s /run/secrets/npm_token && wget -q https://registry.npmjs.org -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=npm_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG NPM_TOKEN" }, { "path": "Dockerfile", "text": "${NPM_TOKEN}" } ] } }, { "id": "sbd-0094", "split": "validation", "title": "Dockerfile leaks PYPI_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG PYPI_TOKEN", "RUN echo \"token=${PYPI_TOKEN}\" > .credentials", "RUN wget -q https://pypi.org -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=pypi_token,src=.pypi_token -t sabnock/sbd-0094 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG PYPI_TOKEN", "-RUN echo \"token=${PYPI_TOKEN}\" > .credentials", "-RUN wget -q https://pypi.org -O /dev/null || true", "+RUN --mount=type=secret,id=pypi_token sh -c 'test -s /run/secrets/pypi_token && wget -q https://pypi.org -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=pypi_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG PYPI_TOKEN" }, { "path": "Dockerfile", "text": "${PYPI_TOKEN}" } ] } }, { "id": "sbd-0095", "split": "validation", "title": "Dockerfile leaks GITHUB_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG GITHUB_TOKEN", "RUN echo \"token=${GITHUB_TOKEN}\" > .credentials", "RUN wget -q https://github.com -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=github_token,src=.github_token -t sabnock/sbd-0095 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG GITHUB_TOKEN", "-RUN echo \"token=${GITHUB_TOKEN}\" > .credentials", "-RUN wget -q https://github.com -O /dev/null || true", "+RUN --mount=type=secret,id=github_token sh -c 'test -s /run/secrets/github_token && wget -q https://github.com -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=github_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG GITHUB_TOKEN" }, { "path": "Dockerfile", "text": "${GITHUB_TOKEN}" } ] } }, { "id": "sbd-0096", "split": "validation", "title": "Dockerfile leaks GEM_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG GEM_TOKEN", "RUN echo \"token=${GEM_TOKEN}\" > .credentials", "RUN wget -q https://rubygems.org -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=gem_token,src=.gem_token -t sabnock/sbd-0096 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG GEM_TOKEN", "-RUN echo \"token=${GEM_TOKEN}\" > .credentials", "-RUN wget -q https://rubygems.org -O /dev/null || true", "+RUN --mount=type=secret,id=gem_token sh -c 'test -s /run/secrets/gem_token && wget -q https://rubygems.org -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=gem_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG GEM_TOKEN" }, { "path": "Dockerfile", "text": "${GEM_TOKEN}" } ] } }, { "id": "sbd-0097", "split": "challenge", "title": "Dockerfile leaks CARGO_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG CARGO_TOKEN", "RUN echo \"token=${CARGO_TOKEN}\" > .credentials", "RUN wget -q https://crates.io -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=cargo_token,src=.cargo_token -t sabnock/sbd-0097 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG CARGO_TOKEN", "-RUN echo \"token=${CARGO_TOKEN}\" > .credentials", "-RUN wget -q https://crates.io -O /dev/null || true", "+RUN --mount=type=secret,id=cargo_token sh -c 'test -s /run/secrets/cargo_token && wget -q https://crates.io -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=cargo_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG CARGO_TOKEN" }, { "path": "Dockerfile", "text": "${CARGO_TOKEN}" } ] } }, { "id": "sbd-0098", "split": "challenge", "title": "Dockerfile leaks NUGET_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG NUGET_TOKEN", "RUN echo \"token=${NUGET_TOKEN}\" > .credentials", "RUN wget -q https://nuget.org -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=nuget_token,src=.nuget_token -t sabnock/sbd-0098 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG NUGET_TOKEN", "-RUN echo \"token=${NUGET_TOKEN}\" > .credentials", "-RUN wget -q https://nuget.org -O /dev/null || true", "+RUN --mount=type=secret,id=nuget_token sh -c 'test -s /run/secrets/nuget_token && wget -q https://nuget.org -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=nuget_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG NUGET_TOKEN" }, { "path": "Dockerfile", "text": "${NUGET_TOKEN}" } ] } }, { "id": "sbd-0099", "split": "challenge", "title": "Dockerfile leaks GITLAB_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG GITLAB_TOKEN", "RUN echo \"token=${GITLAB_TOKEN}\" > .credentials", "RUN wget -q https://gitlab.com -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=gitlab_token,src=.gitlab_token -t sabnock/sbd-0099 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG GITLAB_TOKEN", "-RUN echo \"token=${GITLAB_TOKEN}\" > .credentials", "-RUN wget -q https://gitlab.com -O /dev/null || true", "+RUN --mount=type=secret,id=gitlab_token sh -c 'test -s /run/secrets/gitlab_token && wget -q https://gitlab.com -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=gitlab_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG GITLAB_TOKEN" }, { "path": "Dockerfile", "text": "${GITLAB_TOKEN}" } ] } }, { "id": "sbd-0100", "split": "challenge", "title": "Dockerfile leaks SENTRY_AUTH_TOKEN through ARG", "summary": "The Dockerfile passes a secret through ARG and writes it into a layer instead of using a BuildKit secret mount.", "failure_type": "build_secret_leak", "ecosystem": "security", "difficulty": "hard", "tags": [ "dockerfile", "buildkit", "secrets", "security" ], "files": [ { "path": "Dockerfile", "content": [ "FROM alpine:3.20", "WORKDIR /app", "ARG SENTRY_AUTH_TOKEN", "RUN echo \"token=${SENTRY_AUTH_TOKEN}\" > .credentials", "RUN wget -q https://sentry.io -O /dev/null || true", "CMD [\"true\"]" ] } ], "failure_log": [ "security-scan: SecretsUsedInArgOrEnv", "security-scan: secret may persist in image layer history" ], "build": { "command": "DOCKER_BUILDKIT=1 docker build --secret id=sentry_token,src=.sentry_token -t sabnock/sbd-0100 ." }, "verify": { "commands": [ "docker buildx build --check ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -1,6 +1,5 @@", "+# syntax=docker/dockerfile:1.7", " FROM alpine:3.20", " WORKDIR /app", "-ARG SENTRY_AUTH_TOKEN", "-RUN echo \"token=${SENTRY_AUTH_TOKEN}\" > .credentials", "-RUN wget -q https://sentry.io -O /dev/null || true", "+RUN --mount=type=secret,id=sentry_token sh -c 'test -s /run/secrets/sentry_token && wget -q https://sentry.io -O /dev/null || true'", " CMD [\"true\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "# syntax=docker/dockerfile:1.7" }, { "path": "Dockerfile", "text": "--mount=type=secret,id=sentry_token" } ], "must_not_contain": [ { "path": "Dockerfile", "text": "ARG SENTRY_AUTH_TOKEN" }, { "path": "Dockerfile", "text": "${SENTRY_AUTH_TOKEN}" } ] } }, { "id": "sbd-0101", "split": "challenge", "title": "Poetry install runs before service source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY service ./service", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"service\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0101\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"service\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "service/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package service" ], "build": { "command": "docker build -t sabnock/sbd-0101 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0101 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY service ./service", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"service\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } }, { "id": "sbd-0102", "split": "challenge", "title": "Poetry install runs before api source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY api ./api", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"api\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0102\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"api\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "api/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package api" ], "build": { "command": "docker build -t sabnock/sbd-0102 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0102 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY api ./api", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"api\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } }, { "id": "sbd-0103", "split": "challenge", "title": "Poetry install runs before worker source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY worker ./worker", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"worker\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0103\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"worker\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "worker/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package worker" ], "build": { "command": "docker build -t sabnock/sbd-0103 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0103 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY worker ./worker", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"worker\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } }, { "id": "sbd-0104", "split": "challenge", "title": "Poetry install runs before jobs source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY jobs ./jobs", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"jobs\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0104\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"jobs\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "jobs/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package jobs" ], "build": { "command": "docker build -t sabnock/sbd-0104 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0104 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY jobs ./jobs", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"jobs\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } }, { "id": "sbd-0105", "split": "challenge", "title": "Poetry install runs before billing source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY billing ./billing", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"billing\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0105\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"billing\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "billing/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package billing" ], "build": { "command": "docker build -t sabnock/sbd-0105 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0105 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY billing ./billing", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"billing\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } }, { "id": "sbd-0106", "split": "challenge", "title": "Poetry install runs before search source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY search ./search", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"search\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0106\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"search\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "search/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package search" ], "build": { "command": "docker build -t sabnock/sbd-0106 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0106 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY search ./search", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"search\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } }, { "id": "sbd-0107", "split": "challenge", "title": "Poetry install runs before gateway source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY gateway ./gateway", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"gateway\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0107\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"gateway\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "gateway/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package gateway" ], "build": { "command": "docker build -t sabnock/sbd-0107 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0107 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY gateway ./gateway", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"gateway\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } }, { "id": "sbd-0108", "split": "challenge", "title": "Poetry install runs before scheduler source exists", "summary": "Poetry tries to install the root project before the package directory is copied into the image.", "failure_type": "poetry_root_install_order", "ecosystem": "python", "difficulty": "medium", "tags": [ "dockerfile", "python", "poetry", "dependency-install" ], "files": [ { "path": "Dockerfile", "content": [ "FROM python:3.12-slim", "WORKDIR /app", "RUN pip install --no-cache-dir poetry==1.8.3", "COPY pyproject.toml ./", "RUN poetry install --only main", "COPY scheduler ./scheduler", "CMD [\"poetry\", \"run\", \"python\", \"-m\", \"scheduler\"]" ] }, { "path": "pyproject.toml", "content": [ "[tool.poetry]", "name = \"sbd-0108\"", "version = \"0.1.0\"", "description = \"synthetic task\"", "authors = [\"Sabnock \"]", "packages = [{ include = \"scheduler\" }]", "", "[tool.poetry.dependencies]", "python = \"^3.12\"", "", "[build-system]", "requires = [\"poetry-core\"]", "build-backend = \"poetry.core.masonry.api\"" ] }, { "path": "scheduler/__main__.py", "content": [ "print('ok')" ] } ], "failure_log": [ "Error: No file/folder found for package scheduler" ], "build": { "command": "docker build -t sabnock/sbd-0108 ." }, "verify": { "commands": [ "docker build -t sabnock/sbd-0108 ." ] }, "oracle_patch": [ "--- a/Dockerfile", "+++ b/Dockerfile", "@@ -2,6 +2,6 @@", " WORKDIR /app", " RUN pip install --no-cache-dir poetry==1.8.3", " COPY pyproject.toml ./", "-RUN poetry install --only main", "+RUN poetry install --only main --no-root", " COPY scheduler ./scheduler", " CMD [\"poetry\", \"run\", \"python\", \"-m\", \"scheduler\"]" ], "scoring": { "must_touch": [ "Dockerfile" ], "must_contain": [ { "path": "Dockerfile", "text": "poetry install --only main --no-root" } ], "must_not_contain": [] } } ]