fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(binary): address missing dockerfile in container agents - #2139

Merged
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev
Aug 28, 2026
Merged

fix(binary): address missing dockerfile in container agents#2139
Hweinstock merged 1 commit into
aws:refactorfrom
Hweinstock:fix/container-dev

Conversation

@Hweinstock

Copy link
Copy Markdown
Contributor

Problem

Dev fails when using the binary on container based agents.

> agentcore project create --template hello-world-python-container --name testP
...
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 35509; traces persist to /local/home/hkobew/gh-repos/agentcore-cli/testP/agentcore/.cli/traces/otlp.
Error: container Dockerfile not found: /local/home/hkobew/gh-repos/agentcore-cli/testP/app/hello_world/Dockerfile

container based agents (currently only hello-world-python-container) are unable to find the dockerfile in dev mode. This is because the Dockerfile is never rendered into the project.

The root cause is that assets are embedded with the following pattern:

naming: {asset: ASSET_NAMING},

from

constASSET_NAMING="agentcore-assets/[dir]/[name].[ext]";

But when a file doesn't have an extension, its still rendered as [dir]/[name]. ex. Dockerfile --> Dockerfile. so we can't find it.

Solution

  • rename Dockerfile to Dockerfile.template.
  • tweak renderName to remove this template so that Dockerfile is rendered.

Verification

> agentcore project create --template hello-world-python-container --name testagent
...
> ls testagent/app/hello_world Dockerfile README.md main.py pyproject.toml uv.lock
> agentcore project dev --mode headless --agent hello_world
OTEL collector listening on port 33811; traces persist to /local/home/...
[hello_world] Building image with docker
[hello_world] #0 building with "default" instance using docker driver
[hello_world] #1 [internal] load build definition from Dockerfile
[hello_world] #1 transferring dockerfile: 1.18kB done
[hello_world] #1 DONE 0.0s
[hello_world] #2 [internal] load metadata for public.ecr.aws/docker/library/python:3.12-slim-trixie
[hello_world] #2 DONE 0.1s
[hello_world] #3 [internal] load .dockerignore
[hello_world] #3 transferring context: 358B done
[hello_world] #3 DONE 0.0s
[hello_world] #4 [1/8] FROM public.ecr.aws/docker/library/python:3.12-slim-trixie@sha256:09f7da3bc104798d0afb40bc08d23ab2da20a76130cec1f2ef170848f5d85217
[hello_world] #4 DONE 0.0s
[hello_world] #5 [internal] load build context
[hello_world] #5 transferring context: 489.23kB done
[hello_world] #5 DONE 0.0s
[hello_world] #6 [7/8] COPY --chown=bedrock_agentcore:bedrock_agentcore . .
[hello_world] #6 CACHED
[hello_world] #7 [4/8] RUN useradd -m -u 1000 bedrock_agentcore
[hello_world] #7 CACHED
[hello_world] #8 [5/8] COPY pyproject.toml uv.lock ./
[hello_world] #8 CACHED
[hello_world] #9 [2/8] RUN pip install --no-cache-dir uv
[hello_world] #9 CACHED
[hello_world] #10 [3/8] WORKDIR /app
[hello_world] #10 CACHED
[hello_world] #11 [6/8] RUN uv sync --frozen --no-dev --no-install-project
[hello_world] #11 CACHED
[hello_world] #12 [8/8] RUN uv sync --frozen --no-dev
[hello_world] #12 CACHED
[hello_world] #13 exporting to image
[hello_world] #13 exporting layers done
[hello_world] #13 writing image sha256:5e4124733d9ad91e4ef6dc1987e9df0ac78cfdc830f329842fc91a47f059647f done
[hello_world] #13 naming to docker.io/agentcore-dev/hello_world-706037c853f9 done
[hello_world] #13 DONE 0.0s
[hello_world] Starting container
[separate terminal]
> curl -X POST http://localhost:8080/invocations \
-H "Content-Type: application/json" \
-d '{"prompt": "Hello!"}'
agent response ...

@github-actionsgithub-actionsBot added the size/s PR size: S label Aug 28, 2026
@agentcore-devx-automationagentcore-devx-automationBot added agentcore-harness-reviewing AgentCore Harness review in progress claude-security-reviewing Claude Code /security-review in progress labels Aug 28, 2026
@agentcore-devx-automation

Copy link
Copy Markdown
Contributor

Claude Security Review: no high-confidence findings. (run)

@agentcore-devx-automationagentcore-devx-automationBot removed the claude-security-reviewing Claude Code /security-review in progress label Aug 28, 2026

@agentcore-devx-automationagentcore-devx-automationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AgentCore Harness Review

Verdict: Looks good

Clean, targeted fix for the missing Dockerfile in bundled/embedded container templates. Renaming to Dockerfile.template and generalizing renderName to strip a trailing .template for non-ignore files is a natural extension of the existing pattern.

Some things I checked and confirmed are fine:

  • The generalized .template stripping in renderName only affects files loaded via FsTreeNode.fromAssetSource. The only other callers today are templates/hello-world-python-container, templates/hello-world-python, templates/strands-http-python, and cdk/ — none of them contain non-ignore .template files that would be adversely renamed.
  • templates/shared/env.local.template is read via assetSource.read directly, not through fromAssetSource, so its name is unaffected.
  • The *ignore.template branch runs first and early-returns, so gitignore.template/npmignore.template/dockerignore.template still resolve to their dotfile forms.
  • New test uses a real in-memory AssetSource rather than mocks — matches the codebase convention.
  • Bug fix (not a new feature), so no telemetry expected.

@agentcore-devx-automationagentcore-devx-automationBot removed the agentcore-harness-reviewing AgentCore Harness review in progress label Aug 28, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 97.19%. Comparing base (fadad5a) to head (9145394).

Additional details and impacted files
@@ Coverage Diff @@## refactor #2139 +/- ##
=========================================
Coverage 97.19% 97.19% =========================================
Files 471 471 Lines 28731 28733 +2 =========================================
+ Hits 27925 27927 +2 
Misses 806 806 

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@tejaskashtejaskash left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Hweinstock
Hweinstock merged commit ca379a9 into aws:refactorAug 28, 2026
22 of 26 checks passed
@Hweinstock
Hweinstock deleted the fix/container-dev branch August 28, 2026 13:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/sPR size: S

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@Hweinstock@codecov-commenter@tejaskash@nborges-aws