Download server/tasks/task_2_docker_runtime.py from jester1177/cloudnative-devops-debug-env: direct link, hf CLI and curl.
- Browser
- Download file 8.12 kB
-
https://huggingface.co/spaces/jester1177/cloudnative-devops-debug-env/resolve/main/server/tasks/task_2_docker_runtime.py
- Command line
-
hf download hf://spaces/jester1177/cloudnative-devops-debug-env/server/tasks/task_2_docker_runtime.py
-
curl -L -o task_2_docker_runtime.py https://huggingface.co/spaces/jester1177/cloudnative-devops-debug-env/resolve/main/server/tasks/task_2_docker_runtime.py
8.12 kB
| """Task 2: Dockerfile Runtime Errors — MEDIUM. | |
| Agent fixes Dockerfiles that build successfully but fail at container | |
| runtime: missing WORKDIR, CMD/ENTRYPOINT conflicts, permission issues, | |
| and missing environment variables. | |
| """ | |
| from server.models import TaskDifficulty | |
| from server.tasks.base import BaseTask | |
| class DockerfileRuntimeTask(BaseTask): | |
| NAME = "Dockerfile Runtime Errors" | |
| DESCRIPTION = "Fix runtime/container execution issues in Dockerfiles" | |
| DIFFICULTY = TaskDifficulty.MEDIUM | |
| AVAILABLE_SECRETS = [] | |
| SCENARIOS = [ | |
| # Scenario 1: Missing WORKDIR — node module resolution fails at runtime | |
| { | |
| "id": "missing_workdir", | |
| "files": [ | |
| { | |
| "path": "Dockerfile", | |
| "type": "dockerfile", | |
| "content": ( | |
| "FROM node:18-alpine\n" | |
| "COPY package*.json ./\n" | |
| "RUN npm ci\n" | |
| "COPY . .\n" | |
| 'CMD ["npm", "start"]' | |
| ), | |
| }, | |
| { | |
| "path": "package.json", | |
| "type": "other", | |
| "content": '{"name": "app", "scripts": {"start": "node index.js"}}', | |
| }, | |
| ], | |
| "error": { | |
| "phase": "docker_run", | |
| "message": "Error: Cannot find module '/package.json'", | |
| "exit_code": 1, | |
| "failed_step": "npm start", | |
| }, | |
| "expected_fixes": [ | |
| { | |
| "file": "Dockerfile", | |
| "type": "contains", | |
| "expected": "WORKDIR /app", | |
| "hint": "Set a working directory before COPY/RUN so files land in /app, not /", | |
| } | |
| ], | |
| }, | |
| # Scenario 2: CMD and ENTRYPOINT both defined as full exec forms — conflict | |
| { | |
| "id": "cmd_entrypoint_conflict", | |
| "files": [ | |
| { | |
| "path": "Dockerfile", | |
| "type": "dockerfile", | |
| "content": ( | |
| "FROM python:3.11-slim\n" | |
| "WORKDIR /app\n" | |
| "COPY . .\n" | |
| "RUN pip install -r requirements.txt\n" | |
| 'ENTRYPOINT ["python", "server.py"]\n' | |
| 'CMD ["python", "server.py"]' | |
| ), | |
| }, | |
| { | |
| "path": "requirements.txt", | |
| "type": "requirements", | |
| "content": "flask==2.3.0", | |
| }, | |
| ], | |
| "error": { | |
| "phase": "docker_run", | |
| "message": ( | |
| "container exits immediately; process started twice — " | |
| "ENTRYPOINT and CMD both specify the full command" | |
| ), | |
| "exit_code": 1, | |
| "failed_step": "container start", | |
| }, | |
| "expected_fixes": [ | |
| { | |
| "file": "Dockerfile", | |
| "type": "not_contains", | |
| "expected": 'CMD ["python", "server.py"]', | |
| "hint": ( | |
| "When using ENTRYPOINT as a full command, CMD should provide " | |
| "default arguments only, or be removed entirely" | |
| ), | |
| } | |
| ], | |
| }, | |
| # Scenario 3: Entrypoint script not executable | |
| { | |
| "id": "entrypoint_not_executable", | |
| "files": [ | |
| { | |
| "path": "Dockerfile", | |
| "type": "dockerfile", | |
| "content": ( | |
| "FROM python:3.11-slim\n" | |
| "WORKDIR /app\n" | |
| "COPY . .\n" | |
| "RUN pip install -r requirements.txt\n" | |
| 'ENTRYPOINT ["./start.sh"]' | |
| ), | |
| }, | |
| { | |
| "path": "requirements.txt", | |
| "type": "requirements", | |
| "content": "flask==2.3.0", | |
| }, | |
| { | |
| "path": "start.sh", | |
| "type": "other", | |
| "content": "#!/bin/bash\npython app.py", | |
| }, | |
| ], | |
| "error": { | |
| "phase": "docker_run", | |
| "message": "exec ./start.sh: permission denied", | |
| "exit_code": 126, | |
| "failed_step": "ENTRYPOINT ./start.sh", | |
| }, | |
| "expected_fixes": [ | |
| { | |
| "file": "Dockerfile", | |
| "type": "contains", | |
| "expected": "RUN chmod +x ./start.sh", | |
| "hint": "The entrypoint script must be made executable with chmod +x before the ENTRYPOINT instruction", | |
| } | |
| ], | |
| }, | |
| # Scenario 4: App crashes because a required ENV variable is missing | |
| { | |
| "id": "missing_required_env", | |
| "files": [ | |
| { | |
| "path": "Dockerfile", | |
| "type": "dockerfile", | |
| "content": ( | |
| "FROM python:3.11-slim\n" | |
| "WORKDIR /app\n" | |
| "COPY . .\n" | |
| "RUN pip install -r requirements.txt\n" | |
| "EXPOSE 8080\n" | |
| 'CMD ["python", "app.py"]' | |
| ), | |
| }, | |
| { | |
| "path": "requirements.txt", | |
| "type": "requirements", | |
| "content": "flask==2.3.0\ngunicorn==21.2.0", | |
| }, | |
| ], | |
| "error": { | |
| "phase": "docker_run", | |
| "message": ( | |
| "KeyError: 'DATABASE_URL'\n" | |
| "Application requires DATABASE_URL environment variable to be set" | |
| ), | |
| "exit_code": 1, | |
| "failed_step": "python app.py", | |
| }, | |
| "expected_fixes": [ | |
| { | |
| "file": "Dockerfile", | |
| "type": "contains", | |
| "expected": "ENV DATABASE_URL", | |
| "hint": "Add an ENV instruction to set DATABASE_URL (use a default or placeholder value)", | |
| } | |
| ], | |
| }, | |
| # Scenario 5: Non-root user can't bind to privileged port | |
| { | |
| "id": "non_root_privileged_port", | |
| "files": [ | |
| { | |
| "path": "Dockerfile", | |
| "type": "dockerfile", | |
| "content": ( | |
| "FROM python:3.11-slim\n" | |
| "WORKDIR /app\n" | |
| "COPY . .\n" | |
| "RUN pip install -r requirements.txt\n" | |
| "RUN useradd --create-home appuser\n" | |
| "USER appuser\n" | |
| "EXPOSE 80\n" | |
| 'CMD ["python", "app.py"]' | |
| ), | |
| }, | |
| { | |
| "path": "requirements.txt", | |
| "type": "requirements", | |
| "content": "flask==2.3.0", | |
| }, | |
| ], | |
| "error": { | |
| "phase": "docker_run", | |
| "message": ( | |
| "PermissionError: [Errno 13] Permission denied — " | |
| "non-root user cannot bind to port 80" | |
| ), | |
| "exit_code": 1, | |
| "failed_step": "python app.py", | |
| }, | |
| "expected_fixes": [ | |
| { | |
| "file": "Dockerfile", | |
| "type": "contains", | |
| "expected": "EXPOSE 8080", | |
| "hint": "Non-root users cannot bind to ports below 1024 — use a higher port like 8080", | |
| } | |
| ], | |
| }, | |
| ] | |