[
{
"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": []
}
}
]