{"id":"692e38db-3763-41b8-8211-71f40996920e","shortId":"EGMgsA","kind":"skill","title":"dockerfile-skill","tagline":"Generate production-ready Dockerfile for any GitHub project. Supports monorepo, multi-stage builds, workspace detection, and iterative build-fix cycles. Use when user asks to create, generate, write, fix, or improve a Dockerfile, wants to containerize an application, mentions Doc","description":"# Dockerfile Generator Skill\n\n## Overview\n\nThis skill generates production-ready Dockerfiles through a 4-phase process:\n1. **Deep Analysis** - Understand project structure, workspace, migrations, and build complexity\n2. **Generate** - Create Dockerfile with migration handling and build optimization\n3. **Build & Fix** - Validate through actual build, fix errors iteratively\n4. **Runtime Validation** - Verify migrations ran, app works, database populated\n\n## Key Capabilities\n\n- **Workspace/Monorepo Support**: pnpm workspace, Turborepo, npm workspaces\n- **Custom CLI Detection**: Auto-detect custom build CLIs (turbo, nx, lerna, rush, or project-specific) and use correct syntax\n- **Git Hash Bypass**: Detect and handle projects requiring git commit hash (GITHUB_SHA)\n- **Build-Time Env Vars**: Auto-detect and add placeholders for Next.js SSG\n- **Error Pattern Database**: 40+ known error patterns with automatic fixes\n- **Smart .dockerignore**: Avoid excluding workspace-required files and CLI config dependencies\n- **Custom Entry Points**: Support for custom server launchers\n- **Migration Detection**: Auto-detect ORM, migrations, handle standalone mode\n- **Build Optimization**: Skip heavy CI tasks (lint/type-check) to prevent OOM\n- **Runtime Validation**: Verify migrations ran, database populated, app working\n- **Native Module Support**: Auto-detect Rust/NAPI-RS modules, multi-architecture builds\n- **Static Asset Mapping**: Detect backend's expected static paths and map frontend outputs\n- **External Services**: Auto-detect PostgreSQL, Redis, MinIO, ManticoreSearch dependencies\n- **Zero Human Interaction**: Auto-generate all config files including secrets\n\n## Usage\n\n```\n/dockerfile          # Analyze current directory\n/dockerfile <github-url>    # Clone and analyze GitHub repo\n/dockerfile <path>       # Analyze specific path\n```\n\n## Quick Start\n\nWhen invoked, ALWAYS follow this sequence:\n\n1. Read and execute [modules/analyze.md](modules/analyze.md)\n2. Read and execute [modules/generate.md](modules/generate.md)\n3. Read and execute [modules/build-fix.md](modules/build-fix.md)\n\n## Workflow\n\n### Phase 1: Deep Project Analysis\n\nLoad and execute: [modules/analyze.md](modules/analyze.md)\n\n**Output**: Structured project metadata including:\n- Language / Framework / Package manager\n- Build commands / Run commands / Port\n- External dependencies (DB/Redis/S3)\n- System library requirements\n- **Migration system detection** (ORM, migration count, execution method)\n- **Build complexity analysis** (heavy operations, memory risk)\n- Complexity level (L1/L2/L3)\n\n### Phase 2: Generate Dockerfile\n\nLoad and execute: [modules/generate.md](modules/generate.md)\n\n**Input**: Analysis result from Phase 1\n**Output**:\n- `Dockerfile` (with migration handling, build optimization)\n- `.dockerignore` (workspace-aware)\n- `docker-compose.yml` (if external services needed)\n- `.env.docker.local` (auto-generated with test secrets)\n- `docker-entrypoint.sh` (with migration execution)\n- `DOCKER.md` (complete deployment guide)\n- Environment variable documentation\n\n**Key Enhancements**:\n- Auto-detect Next.js Standalone + ORM → separate deps installation\n- Auto-detect heavy build operations → optimized build command\n- Auto-generate all config files → zero user input required\n\n### Phase 3: Build Validation (Closed Loop)\n\nLoad and execute: [modules/build-fix.md](modules/build-fix.md)\n\n**Process**:\n1. Execute `docker buildx build --platform linux/amd64 --load`\n2. If success → Proceed to Phase 4\n3. If failure → Parse error, match pattern, fix Dockerfile, retry\n4. Max iterations based on complexity level\n\n### Phase 4: Runtime Validation\n\n**Critical Addition**: Don't declare success until runtime verification passes!\n\n**Validation Steps**:\n1. **Container Startup**: `docker-compose up -d` and verify no crashes\n2. **Database Migration**:\n  - Query database: `psql -c \"\\dt\"` → verify tables exist\n  - Check migration count matches expected (e.g., 76/76)\n  - Verify no \"relation does not exist\" errors\n3. **Application Health**:\n  - Test HTTP endpoint → 200/302/401 acceptable, 500 is failure\n  - Check logs for errors\n  - Verify health check endpoint\n4. **Success Criteria**: Only declare success if ALL pass\n\n**Why This Matters**:\n- Previous: Declared success after `docker build`, but app didn't work at runtime\n- Now: Verify migrations ran, database populated, app actually functional\n- Prevents silent migration failures (e.g., standalone mode missing ORM deps)\n\n## Supporting Resources\n\n- **Templates**: [templates/](templates/) - Base Dockerfile templates by tech stack\n- **Error Patterns**: [knowledge/error-patterns.md](knowledge/error-patterns.md) - Known errors and fixes\n- **System Dependencies**: [knowledge/system-deps.md](knowledge/system-deps.md) - NPM/Pip package → system library mapping\n- **Best Practices**: [knowledge/best-practices.md](knowledge/best-practices.md) - Docker production best practices\n- **Output Format**: [examples/output-format.md](examples/output-format.md) - Expected output structure\n\n## Complexity Levels\n\n| Level | Criteria | Max Build Iterations |\n|-------|----------|---------------------|\n| L1 | Single language, no build step, no external services, no migrations | 1 |\n| L2 | Has build step, has external services (DB/Redis), simple migrations | 3 |\n| L3 | Monorepo, multi-language, complex dependencies, build-time env vars, complex migrations (76+) | 5 |\n\n## Common Issues & Solutions\n\n### 1. Database migrations not running - MOST CRITICAL\n**Symptom**: `relation \"users\" does not exist` at runtime\n**Cause**: Migrations detected but never executed\n**Prevention**: Analysis phase Step 12 detects migrations and configures execution\n**Fix**:\n- For Standalone + ORM: Install ORM deps separately\n- Add runtime migration to entrypoint script\n- Verify with `psql -c \"\\dt\"` after container starts\n\n### 2. Out of Memory during build\n**Symptom**: Exit code 137, `Killed`, heap out of memory\n**Cause**: Build script includes lint/type-check for 39+ workspace packages\n**Prevention**: Analysis phase Step 13 detects heavy operations\n**Fix**: Skip CI tasks in Docker build, increase NODE_OPTIONS to 8192MB\n\n### 3. Workspace files not found\n**Symptom**: `ENOENT: no such file or directory, open '/app/e2e/package.json'`\n**Cause**: .dockerignore excludes workspace package.json files\n**Fix**: Use `e2e/*` instead of `e2e`, then `!e2e/package.json`\n\n### 4. lockfile=false projects\n**Symptom**: `Cannot generate lockfile because lockfile is set to false`\n**Cause**: Project has `lockfile=false` in .npmrc\n**Fix**: Use `pnpm install` instead of `pnpm install --frozen-lockfile`\n\n### 5. Build-time env vars missing\n**Symptom**: `KEY_VAULTS_SECRET is not set`\n**Cause**: Next.js SSG needs env vars at build time\n**Fix**: Add ARG/ENV placeholders in build stage\n\n### 6. Node binary path\n**Symptom**: `spawn /bin/node ENOENT`\n**Cause**: Scripts hardcode `/bin/node` but `node:slim` has it at `/usr/local/bin/node`\n**Fix**: Add `RUN ln -sf /usr/local/bin/node /bin/node`\n\n### 7. ORM not found in Standalone mode\n**Symptom**: `Cannot find module 'drizzle-orm'` at runtime\n**Cause**: Next.js standalone doesn't include all node_modules\n**Prevention**: Analysis phase detects standalone + ORM combination\n**Fix**: Install ORM separately in /deps and copy to final image\n\n### 8. Wrong build command for monorepo with custom CLI\n**Symptom**: Build succeeds but output files missing (e.g., `assets-manifest.json` not found)\n**Cause**: Using `yarn workspace @scope/pkg build` instead of detected custom CLI syntax\n**Prevention**: Analysis phase Step 14 detects custom CLI\n**Fix**: Use detected CLI syntax for all build commands\n\n### 9. Git hash required but .git not in Docker context\n**Symptom**: `Failed to open git repo` or `nodegit` errors\n**Cause**: Build tool requires git commit hash for versioning\n**Prevention**: Analysis phase Step 14 detects git hash dependency\n**Fix**: Set `ENV GITHUB_SHA=docker-build` to bypass git requirement\n\n### 10. CLI config files excluded by .dockerignore\n**Symptom**: CLI initialization (e.g., `${CLI_NAME} init`) fails silently\n**Cause**: `.prettierrc`, `.prettierignore`, or other config files excluded\n**Prevention**: Analysis phase Step 14 detects config file dependencies\n**Fix**: Remove config files from .dockerignore exclusions\n\n### 11. Static assets not found at runtime\n**Symptom**: `ENOENT: no such file or directory, open '/app/static/assets-manifest.json'`\n**Cause**: Frontend builds to different path than backend expects\n**Prevention**: Analysis phase Step 14 detects static asset path mapping\n**Fix**: Copy frontend outputs to backend's expected path in Dockerfile\n\n## Success Criteria\n\nA successful Dockerfile must:\n\n**Build Phase**:\n1. Build without errors (`docker buildx build` exits 0)\n2. Image size reasonable (< 2GB for most apps)\n3. Follow production best practices (multi-stage, non-root, fixed versions)\n4. Include all necessary supporting files (.dockerignore, docker-compose.yml, etc.)\n5. Handle all workspace/monorepo requirements\n\n**Runtime Phase** - CRITICAL:\n6. Container starts successfully (no crashes)\n7. **Database migrations execute successfully** (if migrations detected)\n8. **Database tables created** (verify with psql)\n9. **Application responds with valid HTTP codes** (200/302/401, not 500)\n10. **No runtime errors in logs** (no \"relation does not exist\", etc.)\n\n**DO NOT declare success if**:\n- Build passes but runtime fails\n- Migrations detected but tables missing\n- App returns 500 errors\n- Logs show database relation errors\n\n## Post-Build Validation COMPREHENSIVE\n\nAfter successful build, perform FULL validation:\n\n```bash\n# 1. Start services\ndocker-compose up -d\nsleep 30 # Wait for startup\n\n# 2. Check container status\ndocker-compose ps\n# Expected: All containers UP and HEALTHY\n\n# 3. Verify database migrations\nif [ migrations_detected ]; then\n # List tables\n docker-compose exec postgres psql -U <user> -d <db> -c \"\\dt\"\n # Expected: List of tables (users, sessions, etc.)\n # If \"Did not find any relations\" → FAIL\n\n # Count migrations\n MIGRATION_COUNT=$(docker-compose exec postgres psql -U <user> -d <db> -t -c \"SELECT COUNT(*) FROM <migration_table>;\")\n # Expected: Matches analysis count (e.g., 76)\nfi\n\n# 4. Test application health\nHTTP_CODE=$(curl -s -o /dev/null -w \"%{http_code}\" http://localhost:3210)\n# Expected: 200, 302, or 401\n# Unacceptable: 500, 502, 503\n\nif [ \"$HTTP_CODE\" = \"500\" ]; then\n echo \"FAILURE: App returning 500 error\"\n docker-compose logs app\n exit 1\nfi\n\n# 5. Check for errors in logs\ndocker-compose logs app | grep -i \"error\" | tail -20\n# Should NOT contain:\n# - \"relation does not exist\"\n# - \"table not found\"\n# - \"Cannot find module\"\n\n# 6. Check image size\ndocker images <image-name>\n\n# 7. Cleanup (if needed)\ndocker-compose down\n```\n\n**Validation Checklist**:\n- [ ] Image built successfully\n- [ ] Container started without crashes\n- [ ] Database connection established\n- [ ] **Migrations executed (if applicable)**\n- [ ] **Database tables exist (if applicable)**\n- [ ] HTTP endpoint returns valid status\n- [ ] No errors in application logs\n- [ ] Health check passes","tags":["dockerfile","skill","seakills","labring","agent-skills","ai-agent","claude-code","cloud-native","codex","deployment","docker","gemini-cli"],"capabilities":["skill","source-labring","skill-dockerfile-skill","topic-agent-skills","topic-ai-agent","topic-claude-code","topic-cloud-native","topic-codex","topic-deployment","topic-docker","topic-gemini-cli","topic-kubernetes","topic-sealos"],"categories":["seakills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/labring/seakills/dockerfile-skill","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add labring/seakills","source_repo":"https://github.com/labring/seakills","install_from":"skills.sh"}},"qualityScore":"0.458","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 17 github stars · SKILL.md body (11,111 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T13:03:12.560Z","embedding":null,"createdAt":"2026-04-19T00:40:53.776Z","updatedAt":"2026-04-22T13:03:12.560Z","lastSeenAt":"2026-04-22T13:03:12.560Z","tsv":"'-20':1404 '/app/e2e/package.json':797 '/app/static/assets-manifest.json':1096 '/bin/node':880,885,899 '/deps':937 '/dev/null':1355 '/dockerfile':267,271,277 '/usr/local/bin/node':892,898 '0':1143 '1':63,289,309,370,447,495,656,687,1135,1261,1387 '10':1041,1213 '11':1081 '12':712 '13':768 '137':749 '14':979,1024,1069,1110 '2':74,295,357,455,507,740,1144,1274 '200':1362 '200/302/401':538,1210 '2gb':1148 '3':84,301,436,462,532,667,784,1152,1288 '30':1270 '302':1363 '3210':1360 '39':761 '4':60,94,461,472,480,551,812,1165,1346 '40':164 '401':1365 '5':683,844,1174,1389 '500':540,1212,1242,1367,1373,1379 '502':1368 '503':1369 '6':874,1182,1418 '7':900,1188,1424 '76':682,1344 '76/76':524 '8':943,1196 '8192mb':783 '9':992,1203 'accept':539 'actual':89,583 'add':156,726,868,894 'addit':484 'alway':285 'analysi':65,312,348,366,709,765,926,976,1021,1066,1107,1341 'analyz':268,274,278 'app':100,218,570,582,1151,1240,1377,1385,1399 'applic':44,533,1204,1348,1447,1452,1461 'architectur':230 'arg/env':869 'ask':30 'asset':233,1083,1113 'assets-manifest.json':960 'auto':117,153,194,224,248,259,389,408,417,426 'auto-detect':116,152,193,223,247,407,416 'auto-gener':258,388,425 'automat':169 'avoid':173 'awar':381 'backend':236,1104,1121 'base':475,600 'bash':1260 'best':623,629,1155 'binari':876 'build':18,24,72,82,85,90,120,148,201,231,327,346,376,420,423,437,451,568,643,649,659,676,745,756,778,846,865,872,945,953,968,990,1012,1036,1099,1133,1136,1141,1230,1251,1256 'build-fix':23 'build-tim':147,675,845 'buildx':450,1140 'built':1435 'bypass':136,1038 'c':513,735,1306,1335 'cannot':817,908,1415 'capabl':105 'caus':702,755,798,826,858,882,916,963,1011,1057,1097 'check':518,543,549,1275,1390,1419,1464 'checklist':1433 'ci':205,774 'cleanup':1425 'cli':114,180,951,973,982,986,1042,1049,1052 'clis':121 'clone':272 'close':439 'code':748,1209,1351,1358,1372 'combin':931 'command':328,330,424,946,991 'commit':143,1016 'common':684 'complet':399 'complex':73,347,353,477,638,673,680 'compos':500,1266,1280,1300,1328,1383,1397,1430 'comprehens':1253 'config':181,262,429,1043,1062,1071,1076 'configur':716 'connect':1442 'contain':496,738,1183,1276,1284,1407,1437 'container':42 'context':1001 'copi':939,1117 'correct':132 'count':343,520,1322,1325,1337,1342 'crash':506,1187,1440 'creat':32,76,1199 'criteria':553,641,1128 'critic':483,693,1181 'curl':1352 'current':269 'custom':113,119,183,188,950,972,981 'cycl':26 'd':502,1268,1305,1333 'databas':102,163,216,508,511,580,688,1189,1197,1246,1290,1441,1448 'db/redis':664 'db/redis/s3':334 'declar':487,555,564,1227 'deep':64,310 'dep':414,594,724 'depend':182,254,333,615,674,1028,1073 'deploy':400 'detect':20,115,118,137,154,192,195,225,235,249,340,409,418,704,713,769,928,971,980,985,1025,1070,1111,1195,1236,1294 'didn':571 'differ':1101 'directori':270,795,1094 'doc':46 'docker':449,499,567,627,777,1000,1035,1139,1265,1279,1299,1327,1382,1396,1422,1429 'docker-build':1034 'docker-compos':498,1264,1278,1298,1326,1381,1395,1428 'docker-compose.yml':382,1172 'docker-entrypoint.sh':394 'docker.md':398 'dockerfil':2,8,39,47,57,77,359,372,470,601,1126,1131 'dockerfile-skil':1 'dockerignor':172,378,799,1047,1079,1171 'document':404 'doesn':919 'drizzl':912 'drizzle-orm':911 'dt':514,736,1307 'e.g':523,589,959,1051,1343 'e2e':806,809 'e2e/package.json':811 'echo':1375 'endpoint':537,550,1454 'enhanc':406 'enoent':790,881,1089 'entri':184 'entrypoint':730 'env':150,678,848,862,1031 'env.docker.local':387 'environ':402 'error':92,161,166,466,531,546,606,611,1010,1138,1216,1243,1248,1380,1392,1402,1459 'establish':1443 'etc':1173,1224,1314 'examples/output-format.md':633,634 'exclud':174,800,1045,1064 'exclus':1080 'exec':1301,1329 'execut':292,298,304,315,344,362,397,443,448,707,717,1191,1445 'exist':517,530,699,1223,1411,1450 'exit':747,1142,1386 'expect':238,522,635,1105,1123,1282,1308,1339,1361 'extern':245,332,384,652,662 'fail':1003,1055,1234,1321 'failur':464,542,588,1376 'fals':814,825,830 'fi':1345,1388 'file':178,263,430,786,793,803,957,1044,1063,1072,1077,1092,1170 'final':941 'find':909,1318,1416 'fix':25,35,86,91,170,469,613,718,772,804,833,867,893,932,983,1029,1074,1116,1163 'follow':286,1153 'format':632 'found':788,903,962,1085,1414 'framework':324 'frontend':243,1098,1118 'frozen':842 'frozen-lockfil':841 'full':1258 'function':584 'generat':4,33,48,53,75,260,358,390,427,818 'git':134,142,993,997,1006,1015,1026,1039 'github':11,145,275,1032 'grep':1400 'guid':401 'handl':80,139,198,375,1175 'hardcod':884 'hash':135,144,994,1017,1027 'health':534,548,1349,1463 'healthi':1287 'heap':751 'heavi':204,349,419,770 'http':536,1208,1350,1357,1371,1453 'human':256 'imag':942,1145,1420,1423,1434 'improv':37 'includ':264,322,758,921,1166 'increas':779 'init':1054 'initi':1050 'input':365,433 'instal':415,722,836,840,933 'instead':807,837,969 'interact':257 'invok':284 'issu':685 'iter':22,93,474,644 'key':104,405,852 'kill':750 'knowledge/best-practices.md':625,626 'knowledge/error-patterns.md':608,609 'knowledge/system-deps.md':616,617 'known':165,610 'l1':645 'l1/l2/l3':355 'l2':657 'l3':668 'languag':323,647,672 'launcher':190 'lerna':124 'level':354,478,639,640 'librari':336,621 'lint/type-check':207,759 'linux/amd64':453 'list':1296,1309 'ln':896 'load':313,360,441,454 'localhost':1359 'lockfil':813,819,821,829,843 'log':544,1218,1244,1384,1394,1398,1462 'loop':440 'manag':326 'manticoresearch':253 'map':234,242,622,1115 'match':467,521,1340 'matter':562 'max':473,642 'memori':351,743,754 'mention':45 'metadata':321 'method':345 'migrat':70,79,98,191,197,214,338,342,374,396,509,519,578,587,655,666,681,689,703,714,728,1190,1194,1235,1291,1293,1323,1324,1444 'minio':252 'miss':592,850,958,1239 'mode':200,591,906 'modul':221,227,910,924,1417 'modules/analyze.md':293,294,316,317 'modules/build-fix.md':305,306,444,445 'modules/generate.md':299,300,363,364 'monorepo':14,669,948 'multi':16,229,671,1158 'multi-architectur':228 'multi-languag':670 'multi-stag':15,1157 'must':1132 'name':1053 'nativ':220 'necessari':1168 'need':386,861,1427 'never':706 'next.js':159,410,859,917 'node':780,875,887,923 'nodegit':1009 'non':1161 'non-root':1160 'npm':111 'npm/pip':618 'npmrc':832 'nx':123 'o':1354 'oom':210 'open':796,1005,1095 'oper':350,421,771 'optim':83,202,377,422 'option':781 'orm':196,341,412,593,721,723,901,913,930,934 'output':244,318,371,631,636,956,1119 'overview':50 'packag':325,619,763 'package.json':802 'pars':465 'pass':492,559,1231,1465 'path':240,280,877,1102,1114,1124 'pattern':162,167,468,607 'perform':1257 'phase':61,308,356,369,435,460,479,710,766,927,977,1022,1067,1108,1134,1180 'placehold':157,870 'platform':452 'pnpm':108,835,839 'point':185 'popul':103,217,581 'port':331 'post':1250 'post-build':1249 'postgr':1302,1330 'postgresql':250 'practic':624,630,1156 'prettierignor':1059 'prettierrc':1058 'prevent':209,585,708,764,925,975,1020,1065,1106 'previous':563 'proceed':458 'process':62,446 'product':6,55,628,1154 'production-readi':5,54 'project':12,67,128,140,311,320,815,827 'project-specif':127 'ps':1281 'psql':512,734,1202,1303,1331 'queri':510 'quick':281 'ran':99,215,579 'read':290,296,302 'readi':7,56 'reason':1147 'redi':251 'relat':527,695,1220,1247,1320,1408 'remov':1075 'repo':276,1007 'requir':141,177,337,434,995,1014,1040,1178 'resourc':596 'respond':1205 'result':367 'retri':471 'return':1241,1378,1455 'risk':352 'root':1162 'run':329,691,895 'runtim':95,211,481,490,575,701,727,915,1087,1179,1215,1233 'rush':125 'rust/napi-rs':226 'scope/pkg':967 'script':731,757,883 'secret':265,393,854 'select':1336 'separ':413,725,935 'sequenc':288 'server':189 'servic':246,385,653,663,1263 'session':1313 'set':823,857,1030 'sf':897 'sha':146,1033 'show':1245 'silent':586,1056 'simpl':665 'singl':646 'size':1146,1421 'skill':3,49,52 'skill-dockerfile-skill' 'skip':203,773 'sleep':1269 'slim':888 'smart':171 'solut':686 'source-labring' 'spawn':879 'specif':129,279 'ssg':160,860 'stack':605 'stage':17,873,1159 'standalon':199,411,590,720,905,918,929 'start':282,739,1184,1262,1438 'startup':497,1273 'static':232,239,1082,1112 'status':1277,1457 'step':494,650,660,711,767,978,1023,1068,1109 'structur':68,319,637 'succeed':954 'success':457,488,552,556,565,1127,1130,1185,1192,1228,1255,1436 'support':13,107,186,222,595,1169 'symptom':694,746,789,816,851,878,907,952,1002,1048,1088 'syntax':133,974,987 'system':335,339,614,620 'tabl':516,1198,1238,1297,1311,1412,1449 'tail':1403 'task':206,775 'tech':604 'templat':597,598,599,602 'test':392,535,1347 'time':149,677,847,866 'tool':1013 'topic-agent-skills' 'topic-ai-agent' 'topic-claude-code' 'topic-cloud-native' 'topic-codex' 'topic-deployment' 'topic-docker' 'topic-gemini-cli' 'topic-kubernetes' 'topic-sealos' 'turbo':122 'turborepo':110 'u':1304,1332 'unaccept':1366 'understand':66 'usag':266 'use':27,131,805,834,964,984 'user':29,432,696,1312 'valid':87,96,212,438,482,493,1207,1252,1259,1432,1456 'var':151,679,849,863 'variabl':403 'vault':853 'verif':491 'verifi':97,213,504,515,525,547,577,732,1200,1289 'version':1019,1164 'w':1356 'wait':1271 'want':40 'without':1137,1439 'work':101,219,573 'workflow':307 'workspac':19,69,109,112,176,380,762,785,801,966 'workspace-awar':379 'workspace-requir':175 'workspace/monorepo':106,1177 'write':34 'wrong':944 'yarn':965 'zero':255,431","prices":[{"id":"7f85907b-bdd7-47c8-8661-0971728c93ec","listingId":"692e38db-3763-41b8-8211-71f40996920e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"labring","category":"seakills","install_from":"skills.sh"},"createdAt":"2026-04-19T00:40:53.776Z"}],"sources":[{"listingId":"692e38db-3763-41b8-8211-71f40996920e","source":"github","sourceId":"labring/seakills/dockerfile-skill","sourceUrl":"https://github.com/labring/seakills/tree/main/skills/dockerfile-skill","isPrimary":false,"firstSeenAt":"2026-04-19T00:40:53.776Z","lastSeenAt":"2026-04-22T13:03:12.560Z"}],"details":{"listingId":"692e38db-3763-41b8-8211-71f40996920e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"labring","slug":"dockerfile-skill","github":{"repo":"labring/seakills","stars":17,"topics":["agent-skills","ai-agent","claude-code","cloud-native","codex","deployment","docker","gemini-cli","kubernetes","sealos"],"license":null,"html_url":"https://github.com/labring/seakills","pushed_at":"2026-04-22T08:50:08Z","description":"AI agent skills for Sealos Cloud — deploy any project, provision databases, object storage & more with one command. Works with Claude Code, Gemini CLI, Codex.","skill_md_sha":"308ff0cd07b61377f00878780b18cfa7426ff518","skill_md_path":"skills/dockerfile-skill/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/labring/seakills/tree/main/skills/dockerfile-skill"},"layout":"multi","source":"github","category":"seakills","frontmatter":{"name":"dockerfile-skill","description":"Generate production-ready Dockerfile for any GitHub project. Supports monorepo, multi-stage builds, workspace detection, and iterative build-fix cycles. Use when user asks to create, generate, write, fix, or improve a Dockerfile, wants to containerize an application, mentions Docker build issues, needs a .dockerignore, or wants to package their app as a Docker image. Also triggers on \"/dockerfile\"."},"skills_sh_url":"https://skills.sh/labring/seakills/dockerfile-skill"},"updatedAt":"2026-04-22T13:03:12.560Z"}}