The Ecosystem is the Answer: Docker, the Blueprint Alliance, and the Importance of Collaboration in the Agentic Era

In 2025, the average global Fortune 500 enterprise had fewer than 15 AI agents in use. Gartner expects that number to explode to more than 150,000 by 2028. Only 13 percent of organizations think they have the right governance for today, and AI is evolving and moving faster than any other technology paradigm in our history. 

Today, most security leaders face an agentic Sophie’s choice: allow AI adoption without the right controls and hope for the best, or block it and become the obstacle to a priority the business has already set (while adoption continues in the shadows, anyway). 

But there is a third option, one in which organizations fully tap into the transformative power of agentic agents without having to live in fear of a catastrophic security failure. The good news is history has already shown how to get there.

How technology gets adopted

Historically, technology adoption has followed a reliable pattern. A capability spreads, each vendor and team builds its own approach, the inconsistency becomes expensive and ineffective, leading the industry to agree to a shared baseline. Adoption then accelerates.

Take the credit card industry, for example. The big credit brands each ran their own security programs, and merchants had to satisfy every one. This was, of course, cumbersome for the vendors, but also for the customers, too. Every time a customer wanted to adopt a new technology, they had to manually build out security and adoption plans, adding significant adoption and procurement delays. 

Rather than continue on their own, the credit card companies came together to create PCI DSS 1.0 in December 2004 and formed the PCI Security Standards Council in 2006. Buyers now had one thing to ask for, and auditors had one thing to check. Collaboration overcame complexity, and everyone benefited.

Security-minded technologists can find another example closer to home in the Center for Internet Security (CIS). In the early days of the internet, cybersecurity was a veritable wild west. Enter the CIS, which was founded in 2000 because the industry lacked prescriptive, recognized hardening standards. To this day, each CIS Benchmark is built by consensus among volunteer experts, vendors, and academics.

Docker itself is no stranger to the development and furthering of shared standards. As just one example, in 2015, Docker contributed its image format and runC runtime to the Open Container Initiative. A shared baseline at the runtime layer let registries, runtimes, and clouds interoperate.

Each of these examples played a different role: PCI mandated, CIS guided, and OCI standardized. 

Agents will need elements of all three.

Where enterprise AI is on that curve

Agents are in the everyone-builds-their-own phase. Each product solves a real piece of the problem, but which piece, and how the pieces fit, is rarely clear. “Agent governance” or even “AI governance” can mean almost anything.

Adoption is incremental. A developer allows common commands, widens filesystem access, then connects GitHub, a cloud tool and an MCP server, each through a prompt that makes sense on its own. The logs mostly record that the developer acted. Security is often the last to know.

The risks: familiar and new

Much of the risk is familiar. Shadow adoption looks a lot like early SaaS and cloud. Credential sprawl and supply chain exposure are old problems. Inventory, least privilege, audit, and joiner-mover-leaver discipline still apply.

Several things are new, however:

Runtime reprogramming. Users — and the agents themselves — can change what an agent does in plain language, with no release cycle.

Borrowed identity. An agent typically assumes the user’s identity, so anything the user can read, change, or delete, the agent can too.

Autonomy. Agents act asynchronously, spawn sub-agents, and pass authority down the chain. A bad instruction can become an action before anyone steps in.

Risky combinations. A tool with no known vulnerability can still complete a path from untrusted input to sensitive data to external communication.

A shorter response window. Containment has to revoke credentials and sessions, not only kill a process.

Existing controls still matter, but they were not built for this mix of programmability, access, and autonomy.

How the Blueprint Alliance and Agent Baseline respond

As with the credit industry and PCI, cybersecurity and the CIS, and containerization and OCI, collaboration offers the answer to this new era of complexity. That’s why Docker is not just focused on building tools like Docker Sandboxes and Docker AI Governance, but in taking an ecosystem-centric approach to problem solving for our customers. Docker is already a founding participant in multiple initiatives aimed at developing valuable reference architectures for AI security workflows, including the Blueprint Alliance and Agent Baseline.

Both start from the same premise: no single vendor or enforcement point can solve this.

The Blueprint Alliance sets out how the pieces fit together. Okta, AWS, CrowdStrike, Databricks, Docker, Google Cloud, Lovable, Proofpoint, Salesforce, ServiceNow, Wiz and Zscaler are founding members, with GE Appliances and World Central Kitchen as strategic advisors. The open, multi-vendor reference architecture answers four questions: Where are my agents? What can they do? What are they doing? How do I respond? Members have committed to interoperability testing over MCP, OCSF, SSF and CAEP, and to publishing reference integrations.

Agent Baseline sets out what each piece must do and how to verify it. It fills the gap between threat lists, which say what can go wrong, and the capabilities an enterprise needs in place. It defines six outcomes (Discover, Constrain, Authorize, Observe, Validate and Respond) and 35 open, versioned controls, each with a permanent identifier you can cite in an audit finding or RFP response. Docker, Snyk and Keycard drafted it, and the current release is v1.0-draft. Controls stay where they already live, in the identity provider, the sandbox and the SIEM.

Blueprint says how the pieces connect. Agent Baseline says what must be true and can be checked. Both advise starting with discovery before policy, and testing the kill switch before you need it.

For partners, the roles are defined. The Alliance whitepaper assigns integrators the operating model: assessing a customer’s current stack against the architecture, assigning ownership across the pillars, tiering risk, and running lifecycle and compliance over time. Technology partners get a published target to integrate against, and the reference integrations cross vendor lines by design. The partners who can design, integrate and operate across those lines are the ones customers keep.

Where Docker fits

Most Alliance members govern agents from the outside: who the agent is, what it can reach, and what it is observed doing. Docker governs the inside: the environment where the agent executes. As agents move from suggesting actions to taking them, trust has to extend beyond the model to the places where they run. Docker has helped define a shared baseline for the runtime before, and now we’re working with the Alliance and our partners to make that baseline concrete, open, and testable in the age of agents.

The execution environment is where policy gets enforced and evidence gets produced.

That boundary is where policy gets enforced and evidence gets produced. The Alliance whitepaper notes that without runtime support to pause an agent without collateral impact, API-driven containment “provides a false sense of security.” Agent Baseline’s CON-03 calls for isolated, confined execution, which is the job of Docker Sandboxes, while Docker MCP Gateway and Docker Hardened Images cover tool access and the supply chain.The Secure Software Factory reference architecture, drafted in part by Docker authors, applies Agent Baseline to agents that ship code.

What to do next

Baselines let adoption move faster, not slower. Security and platform leaders can assess against the baseline today. Agent Baseline controls are citable, and Okta offers an AI Blueprint Assessment Tool. Partners can start with the Docker Navigator Partner Program, which rewards AI governance work, and with the reference integrations the Alliance publishes. Docker’s VP of Partners Leon Jones explains the program here. Download the blueprint at blueprintalliance.ai and read the controls at agentbaseline.org.

Quelle: https://blog.docker.com/feed/

Where should your code live in a Docker Sandbox?

Giving an agent a sandbox also means deciding which files it will work on. You can share a checkout from your host, give it a separate working directory for a task, or keep the repository entirely inside the sandbox. Each arrangement changes how you, the human, participate in the work.

You might want to watch the diff in your local editor and make changes alongside the agent, or give it room to manage several tasks while you review the results. sbx supports both. The way you organize the checkout can change as you ask the agent to take on more of the work.

Mounting a repository from your host

Sharing a checkout puts the agent in the working tree you already use. Run sbx run from your project directory, and it mounts that directory at the same absolute path inside the sandbox:

$ cd ~/my-project
$ sbx run claude

Open a file in your local editor while the agent works on it, and you’ll see changes as they happen. Git works from either side, so you choose whether you want to let the agent make commits or you do it yourself. Development servers on your host can pick up the edits through hot reload, using the runtime and dependencies installed on your host.

This fits close collaboration on one task. The coordination cost comes from sharing that working tree: switching branches changes the files the agent sees, and your edits become part of its ongoing work. If you want to switch to something unrelated while the agent continues, you’ll need another checkout.

[!NOTE] Dependencies written into the shared checkout are shared too. Packages with native binaries, such as esbuild, may work in the Linux sandbox and fail on a macOS or Windows host. Reinstalling on the host can reverse the problem. Keep separate dependency installations, or run the app consistently in one environment.

Give each task a separate working tree

Git worktrees give each task a directory and branch. You can mount each worktree in its own sandbox, while your original checkout remains available for other work. The agent’s edits appear in the worktree. You can inspect either with your local editor and development tools. Each task also gets its own running environment, with tools to prepare and a sandbox and worktree to clean up afterward.

There is a Git limitation with mounting only a linked worktree. Its .git file points to metadata outside the mount, which the agent can’t reach. It can edit files, but checking status, branching, and committing have to happen on the host. The future of software development still needs you to run git status.

sbx supports a clone mode that gives the agent a separate checkout with Git available inside the sandbox. You keep your local project, but sbx mounts the host source as read-only and creates an independent clone for the agent. Its branch changes and dependency installations stay in its checkout.

Bringing the result back becomes a handoff. While the sandbox is running, you can fetch committed branches through the Git remote sbx adds on your host. Or the agent can push to the repository’s remote and you can retrieve the branch through your usual Git workflow. Your local editor and development server see the changes after you bring them into your checkout.

Keep the project inside the sandbox

A mountless sandbox has no host workspace directory attached. Clone the repository inside it, and the sandbox holds the checkout and its development environment. Your host copy of the project shares no connection with the sandbox checkout.

This workflow resembles working on a remote development machine. Agents connect to the project environment, and you can open a shell with sbx exec or connect an editor to the sandbox over SSH. Changes and dependency installations stay separate from your host. To bring work back, you push a branch to the Git remote.

One sandbox per project can be a useful mental model here. The project and its tools persist across agent sessions and sandbox restarts. An agent can create worktrees per feature it’s working on, push branches, and create pull requests for review. Starting another task doesn’t require you to prepare another host worktree and sandbox, and the agent has Git access in each working directory. Clone mode supports this internal-worktree approach too.

Those tasks share tools and services, so running servers or changing the environment still needs coordination. Separate sandboxes are useful when tasks need independent environments as well as separate files. Branches alone don’t isolate simultaneous edits in one working directory.

That independence adds some distance when you want to try the result. Your usual local editor isn’t looking at these files, and a development server running inside the sandbox needs a published port to reach it from your browser.

For a web app preview, ask the agent:

Start the development server on port 8080, bound to 0.0.0.0.

Then publish the port from another terminal on the host:

$ sbx ports my-sandbox –publish 8080:8080

Open http://localhost:8080 in your browser. It’s possible to work interactively this way, but there’s more ceremony than opening a project already on your filesystem.

An environment file can make setup repeatable, selecting tools and cloning the repository at creation with something like the community github-clone kit. Recreating the sandbox then gives you a fresh environment. Push or copy out work you want to retain first: removing a sandbox deletes files held only there.

Choose the repositories for the job

An API change might need a corresponding frontend change, or another repository might provide useful reference material. You can mount several directories into one sandbox, with read-only access for reference repositories. Local editing and previews remain available, but each writable checkout needs branch and change coordination. Task-specific checkouts also leave directories to clean up afterward.

A workspace manager such as jganoff/wsp can assemble selected repositories for a task. Mounting that workspace gives the agent the projects it needs together. These are standard clones with their own Git metadata, so the agent retains Git access, unlike a mounted linked worktree.

The same scope fits inside a mountless sandbox: clone the repositories needed there and keep the whole workspace in the sandbox. The number of repositories and where their files live are separate choices.

Combine the choices to suit the work

The checkout’s location, the sandbox’s lifetime, and the repositories it contains are choices you can combine. You can keep a project sandbox around for many tasks, or mount a workspace assembled for one job. What suits you may change when you want to work more closely with the agent, or give it more room to manage the work itself.

The Git workflows documentation covers the mechanics of direct mounts, clone mode, and host worktrees.

Quelle: https://blog.docker.com/feed/

Coding Agent Horror Stories: The CVE That Did Not Exist

This is Part 6 of our AI Coding Agent Horror Stories series, where we look at real security incidents involving AI coding agents and at how Docker Sandboxes contain agent execution at the boundary rather than at the command line.

Every story in this series so far has been about an agent reaching for something it should not have touched. We have seen agents wander into home directories, drop production databases, leak credentials, and run shell commands that did something very different from what the developer expected. In each case, the damage came from the agent having more reach than it needed.

This story is the opposite. The agent in this one reached nothing at all, because it was deliberately built so that it could not. And yet, on the night in question, it was still the most dangerous thing in the pipeline. 

This story was shared by Pratik Kumar Singh as part of our Agent Hall of Shame contest on social media.

Today’s Horror Story: The Review That Made Everything Up

A platform engineer built a code review bot for his team. The idea was simple and useful. Every time someone pushes code, the bot reads what changed and writes a review into the pipeline, the same kind of first pass a human teammate would give before a person looks at the change.

He named the bot BuaJi. In India, your bua is your father’s sister, and in many families she is the relative who inspects everything you do and always manages to find something wrong with it. For a code reviewer, it is a fitting name.

What made BuaJi interesting was how carefully it was set up. The bot runs on local models through Ollama, which means the model weights sit on the engineer’s own hardware and no request ever goes out to an AI vendor. It also runs as a job in his CI pipeline, triggered whenever someone pushes code. Taken together, this makes the whole setup self-hosted. The code it reads is company source code, and with this design none of it ever leaves the building. That was a deliberate choice, because his company takes that seriously.

He also gave BuaJi one firm rule: it can read, and it can comment, and that is all. It cannot run terraform apply, which is the command that creates or changes real cloud infrastructure. It cannot run kubectl apply, which changes what is actually running in the Kubernetes cluster. And it cannot push a commit, so it has no way to change the code itself. Those are the commands that change the real world, and BuaJi was given none of them. On paper, this is exactly how you would want an AI reviewer to be built.

The version of BuaJi in the companion repo is a deliberately minimal reviewer. It checks Go files against a handful of style rules. The report below is the kind of free-form finding any reviewer produces once you let it comment in prose rather than pass/fail, which is exactly the direction these bots get pushed in practice.

The change he pushed that night

His product ships with a bundled copy of PostgreSQL. Older PostgreSQL releases have published vulnerabilities with CVE numbers attached, and upgrading to a newer patch release is how you make those known issues go away. So he bumped the version.

– POSTGRES_VERSION=16.11
+ POSTGRES_VERSION=16.13

This is about as boring and as responsible as a code change gets. It touches a few lines, it changes a version number, and its only purpose is to close security holes that are already public. Any reviewer, human or machine, should look at it and approve it in a few seconds. There is nothing in that diff to be suspicious about, and that is precisely why what happened next matters.

What came back

BuaJi responded with roughly fifteen hundred words rejecting the change. For context, a normal review comment is a sentence or two.

The report described the version bump as an “architectural takeover,” a structural change smuggled into the codebase under the cover of routine maintenance. It claimed that the new PostgreSQL build was a vehicle for sending internal data to a third-party company, and it named that company outright. The company does not exist.

It went further. It referred to specific Kubernetes resources by name, as though it had inspected the cluster and found them. Those resources had never existed, and BuaJi had no access to the cluster that would have let it look. It then wrote Go scripts to “isolate the infected PostgreSQL nodes,” even though nothing was infected. Finally, it told the engineer to revoke all IAM access immediately, an action that would lock out every person in the organization, including the people who would be needed to fix any real problem.

Holding the whole argument together was a CVE number that has never been issued by anyone. Of everything in the report, this is the detail worth pausing on. A CVE identifier is one of the easiest things in security to verify, since you can look it up in a public registry in a few seconds. The bot invented a fact in the one place where invented facts are easiest to catch.

And yet the report looked completely convincing. The Markdown was clean and well structured. The YAML it proposed would have parsed without errors. The tone was urgent and confident, the way a senior security engineer writes when they have found something serious and need you to act before it gets worse. The engineer spent about two minutes reading the CI logs, realized that none of it was real, and went back to what he was doing.

In this issue, you’ll learn:

Why a read-only agent that only writes comments can still get your cluster taken down

What makes a fabricated security finding harder to dismiss than an obviously broken one

Why agent output belongs in the untrusted column, the same as agent input

How to move a real AI code reviewer into a Docker Sandbox, step by step, and what that does and does not protect you from

Caption: Comic illustrating how a confident, well-formatted security report from an AI reviewer can be entirely fabricated, and what happens when somebody acts on it.

The Problem

It is important to say clearly that the read-only rule did its job. BuaJi could not carry out any of its own recommendations, and it never had any access to the cluster. Because of that, the entire episode cost the engineer two minutes of his evening and nothing more.

The trouble is that the rule only controlled what BuaJi could do. Nobody had thought about what BuaJi could say. A read-only agent is still allowed to tell people what to do, and the person reading its output usually has exactly the access that the agent was denied. BuaJi could not run the scripts it wrote, but it could write them down and hand them to someone who could.

This engineer caught the problem because he knows his own cluster well. He knew those Kubernetes resources were not real and that nothing had been compromised. Now imagine a newer engineer on call at two in the morning, half awake, looking at a long and alarming security report in the pipeline. Revoking all IAM access in production in the middle of the night is an outage all by itself. Running an unreviewed Go script against your database nodes could be considerably worse. In both scenarios, BuaJi would not have done anything. A person would have done all of it, in good faith, because the report told them to.

What makes this so hard to defend against is that no permission model would have flagged it, because no permission was ever violated. The agent stayed within its boundary. The engineer had every right to run those commands on his own systems. The only thing in the entire chain that was false was the content of the report.

How Docker Sandboxes Contain This

Here’s the honest part: a sandbox is not a fact-checker. No microVM boundary will ever make a review comment accurate. What a boundary changes is what that fabricated output can do once it exists.

Remember where BuaJi’s read-only rule actually lived, in a convention. One engineer configured it in his own pipeline and has to keep remembering to leave it in place. Rules like that hold until someone is in a hurry, or a new teammate copies the config and drops a section they did not understand, or a small exception made for a good reason quietly becomes permanent. None of this needs bad intent; it is just how real teams work.

Docker Sandboxes run agents inside isolated microVMs each with its own kernel, its own filesystem, and a network that denies everything by default. An agent inside one can invent anything it likes, but the invention has nowhere to go: no credentials to use, no cluster to reach, no commit to push, unless someone allowed that access ahead of time. The read-only rule stops being something a person remembers and becomes a property of the environment. And when a report claims it inspected your cluster, the policy log is your proof it never could have.

That protects you from the agent. It does nothing for the human who reads the output, and no sandbox ever will. For that half, treat agent review output the way you already treat agent input, untrusted until something checks it: label it so it doesn’t carry a colleague’s weight, verify any CVE numbers, and never run agent-written remediation until a person has read and understood it.

This is the same pattern as the sandbox escapes Pillar published in July. The boundary itself was never broken; a file was written inside the sandbox, and a tool outside later trusted it. An agent’s output is always an input to whatever reads it next and somewhere downstream, something trusts what it receives. Very often, that something is a person.

Let’s move BuaJi into a Docker Sandbox, one step at a time. By the end, the read-only rule is enforced by the environment, not by memory.

How BuaJi runs today

BuaJi is a small Python script, buaji.py. Its GitLab job installs Ollama on a GPU runner, starts ollama serve, loads the model named in LLM, and runs the script.

The script reads review rules from rules.md and finds the changed files with git diff HEAD^ HEAD –name-only. It sends each file and rule to Ollama at http://localhost:11434 and prints the answers to the CI log.

The catch is that everything shares one container: the model, the script, the checkout and every CI variable, including CI_JOB_TOKEN. BuaJi is read-only only because the script happens not to write anything.

What we want instead

We split the job in two. The model stays on the runner next to the GPU. BuaJi moves into a microVM that can read the code, talk to the model, and nothing else.

One open path to the model, everything else blocked, and a CVE check on the way out.

Step 1: Let BuaJi find Ollama somewhere other than localhost

Inside a sandbox, localhost is the sandbox itself. So we read the Ollama address from an environment variable and keep the old value as the default:

– url = "http://localhost:11434/api/generate"
+ base = os.environ.get("OLLAMA_URL", "http://localhost:11434")
+ url = f"{base}/api/generate"

Outside a sandbox, nothing changes. Inside one, we point OLLAMA_URL at the runner.

Step 2: Bake BuaJi’s dependencies into a sandbox image, once

Today the job runs apt-get and pip3 install on every run, which needs internet access each time.

Instead, build a small image once with everything BuaJi needs, so the sandbox never downloads anything:

FROM docker/sandbox-templates:shell
USER root
RUN apt-get update
&& apt-get install -y –no-install-recommends python3 python3-requests git
&& rm -rf /var/lib/apt/lists/*
USER agent

Push it to your registry and store its name in a CI variable called BUAJI_TEMPLATE.

Step 3: Keep the model on the runner

Ollama stays on the runner with the GPU. Install it once on the runner instead of running curl | sh in every pipeline.

ollama serve > /tmp/ollama.log 2>&1 &
sleep 2
ollama pull "$LLM"

The model never enters the sandbox. BuaJi reaches it through one port, opened in Step 5.

Step 4: Create the sandbox with the code mounted read-only

This step decides what BuaJi can see and change.

mkdir -p "$CI_BUILDS_DIR/buaji-scratch"

sbx run -d –name "$SBX_NAME" -t "$BUAJI_TEMPLATE"
shell "$CI_BUILDS_DIR/buaji-scratch" "$CI_PROJECT_DIR:ro"

Here is what each part does:

–name gives each pipeline its own sandbox.

-t uses the image from Step 2.

shell is the agent type. BuaJi is a plain script, so a shell sandbox is enough.

buaji-scratch is an empty folder, the only place BuaJi can write.

:ro mounts the repository read-only. BuaJi can read files and run git diff, but cannot change anything.

Notice what is missing: no GitLab token, no kubeconfig, no cloud credentials. Even if BuaJi tried kubectl or terraform, it would have nothing to connect with.

Step 5: Open one network path, to the model

Sandboxes block all outgoing traffic by default. We open one path, for this sandbox only. (This assumes the runner’s default policy is deny-all; on a balanced or open default, set the default to deny-all first.)

sbx policy allow network –sandbox "$SBX_NAME" localhost:11434

The allow target (localhost:11434) and the address BuaJi dials (host.docker.internal:11434) are two names for the same runner port,  the first from the runner’s point of view, the second from inside the microVM. Kubernetes, your cloud APIs, and GitLab all stay blocked. If a report claims BuaJi “inspected the cluster,” this rule proves it could not have.

Kubernetes, your cloud APIs and GitLab all stay blocked. If a report claims BuaJi “inspected the cluster,” this rule proves it could not have.

Step 6: Run the review

BuaJi runs as before, just in a new place with only two variables:

sbx exec -w "$CI_PROJECT_DIR"
-e LLM="$LLM"
-e OLLAMA_URL=http://host.docker.internal:11434
"buaji-$CI_PIPELINE_ID" python3 buaji.py | tee buaji-review.log

-w starts in the checkout, where buaji.py expects rules.md.

The two -e flags are the only variables BuaJi can see.

tee saves the review to a file on the runner, outside the sandbox.

The review is now just text. BuaJi cannot post it, act on it, or change what happens to it next.

Step 7: Check every CVE number before anyone acts on the report

This check would have caught the fake report in seconds. It runs on the runner, so BuaJi cannot skip it.

It looks up every CVE ID in the NVD database and fails the job if any of them do not exist:

unverified=""
for id in $(grep -oE 'CVE-[0-9]{4}-[0-9]{4,}' buaji-review.log | sort -u); do
count=$(curl -s "https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=$id"
| jq -r '.totalResults // 0')
[ "$count" = "0" ] && unverified="$unverified $id"
done

if [ -n "$unverified" ]; then
echo "⚠️ BuaJi output mentions CVE IDs that do not exist:$unverified"
echo "⚠️ Treat this review as unverified. Do not run any commands it suggests."
exit 1
fi

Because the job is allow_failure: true, GitLab marks it “passed with warnings.” The pipeline keeps moving, but nobody mistakes the report for a trusted one. This degrades the signal, it does not block the human. The warning is a nudge, not a guardrail ~ a tired on-call engineer can still scroll past it..

It won’t catch every made-up detail, like a fake Kubernetes resource name. But it catches the one that holds most fake reports together.

Step 8: Check what BuaJi tried to reach, then clean up

Finally, review the policy log and remove the sandbox:

sbx policy log "$SBX_NAME"
sbx stop "buaji-$CI_PIPELINE_ID"
sbx rm -f "buaji-$CI_PIPELINE_ID"

The log shows every host BuaJi tried to reach. On a deny-all runner, a healthy run shows only the model on port 11434. Anything else is a signal worth looking at.

Removing the sandbox means every pipeline starts clean.

The complete pipeline job

Put together, the buaji job in .gitlab-ci.yml looks like this:

# BuaJi, moved into a Docker Sandbox. The read-only rule is now a property of
# the environment, not a convention in the script: the code is mounted :ro, no
# credentials are passed in, and only one network path (to the model) is open.
buaji:
stage: buaji
tags:
– self-hosted-gpu-kvm # GPU for Ollama, KVM for sbx microVMs
variables:
LLM: gemma
GIT_DEPTH: "2" # buaji.py diffs HEAD^ against HEAD
SBX_NAME: buaji-$CI_PIPELINE_ID
before_script:
– ollama serve > /tmp/ollama.log 2>&1 &
– sleep 2
– ollama pull "$LLM"
– mkdir -p "$CI_BUILDS_DIR/buaji-scratch"
– sbx run -d –name "$SBX_NAME" -t "$BUAJI_TEMPLATE"
shell "$CI_BUILDS_DIR/buaji-scratch" "$CI_PROJECT_DIR:ro"
– sbx policy allow network –sandbox "$SBX_NAME" localhost:11434
script:
– sbx exec -w "$CI_PROJECT_DIR"
-e LLM="$LLM" -e OLLAMA_URL=http://host.docker.internal:11434
"$SBX_NAME" python3 buaji.py | tee buaji-review.log
– ./scripts/verify-cves.sh buaji-review.log
after_script:
– sbx policy log "$SBX_NAME"
– sbx stop "$SBX_NAME" && sbx rm -f "$SBX_NAME"
allow_failure: true
only:
changes:
– "**/*.go"

The runner needs a GPU and KVM, which usually means self-hosted. GIT_DEPTH: “2” gives buaji.py the two commits it compares. The cleanup sits in after_script, so it runs even when the job fails.

What changed

Before, the read-only rule lived in the script. Now it lives in the environment: a read-only checkout, one network path, no credentials, and only checked text coming out.

What hasn’t changed is the human reading the output. The sandbox stops BuaJi from running its scripts. Only the CVE check and a careful reader stop someone else from running them.

Best Practices

Treat an agent’s security finding as a hypothesis, not a conclusion. A report from an AI reviewer is a claim with good formatting. When a human reviewer flags a security issue, there is an implied step where they checked their reasoning. With an agent, that step has not happened, so you have to do it yourself.

Verify every CVE number before acting on it. This is the cheapest check in the whole process and it catches the single most convincing part of a fabricated report. Automate it, as in Step 7, so it runs on every review without anyone having to remember.

Never run agent-written remediation without reviewing it first. Scripts and commands supplied by an agent are the point where a false finding turns into a real incident. Read them with the same care you would give an unknown script from the internet.

Make read-only a property of the environment, not a habit. A restriction you enforce by hand in a pipeline config is always one rushed change away from disappearing. Mount the code read-only, pass in no credentials, and open only the network paths the agent needs, as in Steps 4 to 6.

Clearly label agent review output as agent output. When a bot’s review looks identical to one from a senior engineer, it borrows authority it has not earned. A clear label helps readers apply the right level of skepticism.

Keep an eye on your signal-to-noise ratio. The curl story is the warning here. A review channel that fills up with noise eventually stops being read, and a review channel nobody reads is worse than having none, because people still assume it is protecting them.

Conclusion

The engineer who built BuaJi was right that the read-only rule protected him, and it genuinely did. BuaJi could not touch the cluster, could not revoke anyone’s access, and could not run a single line of the code it had so carefully written. What the rule could not do was stop BuaJi from asking somebody else to run it.

Every other story in this series has been about an agent reaching too far. This one never reached at all. It stayed inside its boundary, did exactly what it was permitted to do, and still produced a document that would have caused a real outage if the person reading it had been a little more tired, or a little less familiar with their own cluster.

As we give agents more responsibility in our pipelines, containing what they can do is only half the job. A sandbox handles that half. The other half is deciding how much we trust what they tell us, and that part is still up to us.
Quelle: https://blog.docker.com/feed/

Win the Agentic Era, Together: Introducing the Docker Navigator Partner Program

Over the past year, almost every conversation I’ve had with a partner has ended in the same place. Their customers are moving AI agents out of the lab and into production, and the moment they do, the question changes. It stops being “Can we build this?” and becomes “Can we trust it, secure it, and govern it?” The partners who can answer that second set of questions are the partners customers keep.

Today, we are launching the Docker Navigator Partner Program to help you become that partner. This post explains what we’ve built, why we built it around AI governance, and how you can get the most from it.

Why “Navigator”

AI adoption is not following a normal technology curve. Every team, every vendor, every model provider, and every hyperscaler is racing to ship agentic capability, and no single company sees the whole stack. Identity, observability, supply chain security, MCP gateways, models, and clouds are each building their piece. What enterprises are missing is a trusted, common layer that lets those pieces work together safely.

That’s Docker’s role. Docker is where agents, models, and tools actually run: vertically integrated where it matters, and horizontally open to everything our customers already use. We describe it as being the Trusted Navigator for the agentic era; the constant that helps customers make sense of a landscape moving faster than any one team can track.

Partners are how that promise reaches customers. Whether you build technology, run a cloud, deliver services, or sell through the channel, you extend our reach and turn the Docker platform into a complete, governable stack. So the program carries the same name, and its tiers describe the journey a partner takes with us.

Three tiers, one partner journey

Every partner in the Docker Navigator Partner Program is navigating the agentic era with Docker. The tiers mark how far along that journey you are, and the top tier carries the program’s name on purpose: it’s the title you earn when you have shown you can navigate it for customers.

Crew is where every partnership starts: signed, onboarded, portal profile complete, first opportunities registered.

Explorer partners are enabled and certified, actively selling and co-marketing AI governance solutions with us.

Navigator partners are our most strategic: co-selling with Docker, embedded in joint account plans, co-authoring reference architectures, and leading customers through the agentic era alongside us. A Navigator is a partner Docker would put in front of its own customers.

If you’re already a Docker partner, you enter the new program at the tier that matches your status today. Nothing is taken away, and your tier is protected until 30 April 2027 while we work with you on the requirements.

What you get for navigating with us

We designed the benefits around one principle: the more you invest in building a governed AI practice on Docker, the more Docker invests in you. At the top tier, that means:

a dedicated partner success manager and joint account planning with quarterly business reviews;

deal registrations protection;

priority access to betas and a dedicated product roadmap briefing each quarter;

co-funded marketing (MDF), joint campaigns, and co-published customer stories;

speaking slots at Docker events and a seat on our Partner Advisory Board.

The commercial model rewards what you bring:

Partner-sourced, registered deals earn the highest discount at every tier.

From launch until 31 January 2027, every approved AI Governance deal registration earns an additional 10 points on top of your tier discount through the AI Governance Growth Incentive, on deals that close by 30 April 2027.

If you’re working on an AI governance opportunity today, register it. Everything lives in one place: the new Docker Navigator Partner Portal, where you register deals, take the free Docker Partner Sales Certification, request MDF, download assets, and track your progress against your tier in real time.

The ecosystem is the product

No one wins the agentic era alone, and Docker has spent much of 2026 demonstrating our belief in a collaborative ecosystem and approach. For example, in September, Docker became a founding member of the Blueprint Alliance alongside Okta, AWS, CrowdStrike, Databricks, Google Cloud, Lovable, Proofpoint, Salesforce, ServiceNow, Wiz and Zscaler, with GE Appliances and World Central Kitchen serving as strategic advisors. Announced at Oktane in Las Vegas, the Alliance has agreed on a shared architecture for securing AI agents, built around four questions every enterprise is asking: Where are my agents? What can they do? What are they doing? How do I respond? Our part is the environment where agents execute: isolation, runtime governance, and a secure supply chain that extends trust beyond the model to the place the agent runs.

What our partners say

“In the agentic era, you can’t govern what you can’t see. Docker gives teams a secure, consistent runtime for AI agents, and Datadog gives them visibility into how those agents actually behave in production including the tool calls, the costs, the failure modes. Together, that’s a complete picture. The Docker Navigator Partner Program gives our joint partners a clear path to deliver it.“

Uday Tennety
Head of Technology Partnerships, Datadog

“AI agents are writing, containerizing, and shipping code faster than security teams can manually review. Snyk and Docker have spent years helping developers ship securely — and now we’re taking that further. Together, we’re giving teams the ability to run agents in isolated environments with security testing built in from the start, so every dependency, every generated artifact, and every tool an agent can reach is assessed before it ever touches production. The Docker Navigator Partner Program is how that gets to the broader ecosystem.“

Carey Stanton
SVP Business Development, Snyk

Watch: why Docker, and the market opportunity for partners (20 minutes)

Mat Velloso, our Chief Product Officer, and I recorded a 20-minute conversation for partners on why Docker sits where the agentic era is being decided, where the AI governance opportunity is opening up, and what it means for your business. It’s the fastest way to get your sales and technical teams on the same page. After you log in to the Docker Navigator Partner Portal, you can watch the recording here.

Three things to do this week

Log in to the Docker Navigator Partner Portal (https://partner.docker.com/) and complete your company profile.

Register the AI governance opportunities you’re already working on so they qualify for the incentive.

Book a session with your Docker partner manager to agree to your account plan for the first half of 2027.

Not yet a partner? Start at https://www.docker.com/partners/register/.

This is a new program for Docker, and we’re humble enough to know we won’t have everything perfect on day one. We want your feedback and input. Tell us what’s missing. We’ll listen, we’ll be open with you, and we’ll invest in your success.

Let’s win the agentic era, together.

Quelle: https://blog.docker.com/feed/

PHP2Shell and eMudhra Patched

Two security events landed side by side this week, PHP2Shell and the eMudhra certificate compromise. Both reached the same place, the foundation their applications are built on.

PHP2Shell is a pair of critical flaws in the PHP engine itself, CVE-2026-109618 and CVE-2026-109619. They let an unauthenticated request become code execution on the server, on any PHP application, however careful its own code is, and PHP runs about 69% of the websites whose server-side language is known.

The eMudhra compromise is a different kind of problem. Eight intermediate certificates from the certificate authority eMudhra turned out to have private keys that can be computed from the public certificates, which let anyone issue a certificate for any website and have it accepted. Browsers revoke certificates like these on their own, but a container image carries its own trust store and keeps trusting them until it is rebuilt.

Docker Hardened Images published a fixed PHP image within 24 hours

The dhi.io/php image was rebuilt on the patched PHP and published early on October 22, within 24 hours of the upstream release and after the DHI testing and verification steps. Pulling the current tag puts you on the fixed version. The few DHI images that bundle their own PHP application, such as composer and nextcloud, follow as their upstream projects release.

Rebuilt across the catalog, verifiable tag by tag

The certificate compromise touched the whole catalog, because every image carries a trust store. In the 48 hours after the PHP release, the DHI build system ran 16,567 package and image builds across the catalog. By 10pm UTC on October 22, almost all catalog tags were on the fixed CA store, with most of the rest in the build queue. That percentage comes from the SBOM that ships with every image, read for every published tag to check which CA store and which PHP version it carries, and you can run the same check on anything you pull.

How to make sure your environments are covered

If you run PHP on Docker Hardened Images, pull the current tag for your branch and redeploy, and rebuild anything you built on top of a DHI image so it picks up the new base docker pull dhi.io/php:8.4

Customizations built through the DHI Enterprise workflow are rebuilt automatically when the base layer is patched. For the certificate fix the same applies to every image you build from a DHI base, PHP or not. The Docker Security update from October 22 lists the affected PHP versions and the support path.

If you run PHP in any other container, check the PHP version running inside it rather than the tag on the outside, and rebuild it on a patched base.

Build from a trusted foundation

Weeks like this one will keep coming, but a trusted foundation will make all the difference.

If you are not building on hardened images yet, this week is the wake-up call and the week to start. Both events landed on the foundation, and that is where the fix has to happen, in the image itself, rebuilt from fixed sources before anyone pulls it.

This is exactly what Docker Hardened Images were built for. Docker builds, patches and maintains the system packages inside each image from source, and the build system is event-driven, so an upstream release or a changed package triggers rebuilds of everything that depends on it. Each image ships signed, with its SBOM, SLSA Build Level 3 provenance and VEX data attached, which is why a rebuild of this size can be measured as well as done.

The catalog is free and open source under Apache 2.0, with near-zero CVEs on every image. It stays compatible with the Alpine and Debian your teams already run, so adoption is a one-line change to the FROM line in your Dockerfile, with no migration project attached. DHI Select and DHI Enterprise add SLA-backed remediation with critical CVE fixes within 7 days, FIPS and STIG variants, image customization with the guarantees kept, and Extended Lifecycle Support for the versions upstream has stopped patching. All of it is in the Docker Hardened Images catalog, free to pull today.
Quelle: https://blog.docker.com/feed/

ActiveState Partners with Docker to Secure the Open Source in Enterprise Containers

Even security teams that have invested in a hardened base image often can’t say what’s running on top of it. In a recent survey of 250 North American DevSecOps leaders, 91% named visibility into container components as their single biggest blind spot. Not the base image, but everything layered onto it. And 90% said their teams still run lightly modified public images with little to no hardening. 

That gap is getting harder to ignore. AI coding assistants are adding dependencies faster than teams can review them. Vulnerability databases can no longer keep pace with the volume of submissions. New regulatory requirements, including the EU Cyber Resilience Act, are also increasing expectations around vulnerability handling, remediation, and software supply chain transparency. 

Docker Hardened Images meet ActiveState’s Curated Catalog

Docker, Inc. and ActiveState today announced a reselling partnership that brings Docker Hardened Images (DHI) together with ActiveState’s curated open source packages, giving enterprises a more consistent way to secure both the container base and the software dependencies layered on top.

DHI provides secure-by-default, minimal container images, with 4,000+ images built from source, near-zero CVEs, signed SBOMs, and SLSA Build Level 3 provenance. The catalog is free and open source under Apache 2.0, with production tiers backed by a 7-day SLA for critical and high-severity CVEs. 

ActiveState extends that trusted foundation to the open source dependencies developers add on top. Its curated components span more than a dozen language ecosystems, including Python, JavaScript, Java, Perl, Tcl, and Ruby. Components are built from source, continuously maintained and remediated against contractual SLAs, and delivered through the package managers, pipelines, IDEs, and AI coding tools development teams already use. 

Trust across the software stack

A more consistent approach to trusted open source: Pair a hardened container base with curated open source dependencies, reducing the need to source and manage each layer separately

Verifiable provenance across the stack: With both Docker and ActiveState building from source to SLSA Build Level 3 standards, teams get a more consistent evidence trail across the software supply chain

Fewer vulnerabilities, without slowing teams down : DHI delivers near-zero CVEs, 95% smaller attack surface, 7-day SLA on critical/high CVEs. ActiveState provides 95% fewer CVEs and 90% faster remediation than community open source, backed by a 5-day SLA on critical vulnerabilities.

Available Now

The Docker and ActiveState reselling partnership is available now. Explore the partnership.

Quelle: https://blog.docker.com/feed/

Security Update on PHP2Shell: Impact for Docker Customers

Summary

On Tuesday, October 20, 2026, Docker began tracking two critical vulnerabilities in PHP, CVE-2026-109618 and CVE-2026-109619, commonly known as PHP2Shell. The vulnerabilities allow attackers to execute code remotely in PHP core, and they affect PHP packages going back to version 5.4: the supported versions 8.2 through 8.5, and the end-of-life versions 5.x, 7.x, 8.0, and 8.1.

To address these vulnerabilities, PHP released 8.5.12, 8.4.27, 8.3.36, and 8.2.35, and advised anyone running PHP to update to the latest version immediately.

Although this is a vulnerability in PHP itself, not in Docker’s systems, it nonetheless affects Docker users who build on PHP images and packages. In response, we have updated the Docker Hardened Images and Docker Official Images on Docker Hub, and advise customers to immediately update.

What Happened

Along with other package repositories and secure package providers, Docker has been made aware of and is tracking two recently discovered critical vulnerabilities in PHP packages distributed since version 5.4. The two critical vulnerabilities, now commonly referred to as “PHP2Shell,” are identified and tracked as CVE-2026-109618 and CVE-2026-109619. (The PHP Foundation has published a detailed report on the discovery that we recommend reading for full context.)

In short: these vulnerabilities could allow remote code execution in PHP core by malicious actors. Both are flaws in how PHP manages request memory. In CVE-2026-109618, when PHP runs out of memory mid-request and aborts, some code paths leave memory uninitialized, and PHP’s cleanup step then reads it. In CVE-2026-109619, PHP’s internal state can keep pointing at memory that has already been freed, and a later request then uses that stale state. Attackers have multiple ways to trigger either condition and turn it into remote code execution.

Affected versions include the currently supported versions (8.2 through 8.5), as well as the EOL and unsupported versions 5.x, 7.x, 8.0, and 8.1.

Impact to Anyone Using PHP

Whether you are a Docker user or not, if you are using any of the above affected versions of PHP, you should immediately upgrade to the latest version. That includes PHP 8.2.35, 8.3.36, 8.4.27, or 8.5.12, or a later release in the corresponding branch.

There is no other comprehensive remediation for the affected versions. Updating is the only complete mitigation path.

If for any reason you are unable to complete an immediate update, we strongly recommend taking your system offline until such time that you can initiate mitigation. This the guidance of not only Docker, but of the FBI, and numerous experts throughout the cybersecurity community.

Impact to and Actions for Docker Users

While this vulnerability exists in PHP itself and not directly in Docker’s systems, there is nonetheless potential risk and exposure to Docker customers who run PHP in their applications, including anyone using PHP images or packages from Docker Hub, Docker Official Images, or Docker Hardened Images.

For users of Docker Official Images:Docker Official Images have already been updated and released to Docker Hub and mirrored to Amazon ECR. Customers using either of these sources should update immediately.

For users of Docker Hardened Images (DHI):Docker Hardened Images have already been updated and released to Docker Hub. The currently supported versions of PHP were updated as follows:

8.2.34 → 8.2.35

8.3.35 → 8.3.36

8.4.26 → 8.4.27

8.5.11 → 8.5.12

The updates to our images were completed and released within 24-hours of the upstream patches being made available. These images were made available after successfully executing the DHI testing and verification processes.

What’s next

If you have any issues accessing the updated images or migrating to the new versions, please contact Docker Support at app.docker.com/support/contact. As always when it comes to matters of security, we appreciate your diligence.
Quelle: https://blog.docker.com/feed/

From baseline to Secure Software Factory: securing the systems that build your software

In July, Docker, Snyk and Keycard published Agent Baseline, an open, vendor-neutral reference architecture that defines security outcomes for running AI agents in the enterprise. It grew out of conversations with industry leaders who want to adopt agents more broadly but need answers to three questions:

What is operating, with what capabilities?

Is it staying inside approved boundaries?

Can you prove what happened and stop it?

Agent Baseline gave the industry a shared frame of reference for secure agent adoption by defining the security outcomes for safely deploying agents in organizations. Last week, we published the Secure Software Factory reference architecture, which applies those outcomes to one of the most common agentic workflows: the AI-powered software factory.

Enter the Secure Software Factory

The Secure Software Factory was written by practitioners from Keycard, Socket, Docker, Tessl, Tracebit, Browserbase and Tailscale and shaped by conversations with security leaders at large enterprises in regulated environments such as finance and insurance.

Over the past year, many engineering teams have started building software factories: systems where agents take a request, change code, run tests and hand the result to a human for review. Teams report faster delivery, but also agents doing things nobody asked for, like escaping sandboxes, dropping databases and pushing to production without approval.

Teams need controls that limit what agents can access and do, and check their work at each step. The Secure Software Factory reference architecture shows how to apply Agent Baseline’s security outcomes across this workflow, covering:

The factory workflow, from inputs through design, assembly, build and verification, with controls at each stage.

Architectural primitives for identity and access, supply chain, network controls, runtime isolation and orchestration.

A maturity model with three levels, so teams can start where they are and improve over time.

The paper’s central idea is that the more autonomy you give an agent, the less you can rely on it to police itself. An agent can be redirected at runtime by a prompt, a poisoned dependency or a malicious tool description. Controls have to work regardless of what the agent decides, which means they need to live in the environment it runs in. That means boundaries around credentials, tools, dependencies and network access, backed by evidence of what happened and a human accountable for the result.

This is the part of the problem Docker solves. Containers isolate applications; sandboxes isolate actors. Docker Sandboxes are isolated MicroVMs that constrain agents, deterministically. 

Docker Sandboxes lets coding agents work autonomously in isolated microVM environments, locally or in the cloud, with explicit boundaries around the files, network destinations, and credentials they can access. This supports Agent Baseline’s Constrain outcome by confining agent execution and limiting its reach to what the approved task requires.

Agent Baseline is only useful if the people building the agent stack agree on it. Which is why we are proud to be among leading companies such as Snyk, Keycard, Browserbase, Tessl, Socket and Tracebit, in shaping the baseline and the reference architectures built on it.

More companies are joining Agent Baseline

In a software factory, context is the new code: it’s what actually gets executed. The skills you consume are part of your supply chain, and can be vulnerable, negligent or outright malicious. They need the same security controls software modules do – let’s get it right from the start!  

Guy Podjarny, Founder and CEO, Tessl

“We’ve spent decades learning not to give software more access than it needs. We seem to have forgotten much of that now that the software can talk back. Agents need to reach real systems, sometimes even production. The rules haven’t changed: give them the authority to do a particular job, make that authority expire, and keep the policies and audit trail somewhere the agent can’t rewrite them. Agent Baseline gives everyone a common architecture for making that work, without every team having to figure it out from scratch.”

Avery Pennarun, Co-Founder & CEO, Tailscale

“Enterprises are handing AI agents real credentials, and some of those agents will go off-task, whether through prompt injection, a poisoned tool or a simple mistake. Agent Baseline sets the standard for keeping agents in bounds”

Andy Smith, Co-Founder & CEO, Tracebit

“Agents need the right guardrails to complete tasks on behalf of humans. This is an industry wide effort and Browserbase is proud to continue supporting initiatives like Agent Baseline”

Paul Klein, Founder & CEO, Browserbase 

“Agents are already building software, and teams want them picking up work on their own. That only works if an agent’s plan can never become its permission. Agent Baseline gives everyone a shared architecture for deciding what each agent may do, task by task and outside the agent’s reach, so teams can add autonomy without starting their security model over.”

Ian Livingstone, Co-Founder & CEO, Keycard

Get involved

Help shape Agent Baseline and the Secure Software Factory reference architecture by putting them to work.

Read the paper, open an issue on GitHub or join the Agent Baseline Slack to tell us where the architecture doesn’t match how you build. Implementation feedback is the most useful kind.
Quelle: https://blog.docker.com/feed/

Your Agent Runs in a Docker Sandbox. Now It Can Join a Team.

Your sandboxed agents just got a team. The official BAND AI kit for Docker Sandboxes is now available at docker.io/bandhq/band-python-kit:latest.

Docker Sandbox kits package everything an agent needs to run in a Docker Sandbox, so a single sbx create command gives you a ready-to-use agent environment. But an isolated agent is only half the story: real work means talking to people and to other agents. The BAND AI kit connects a sandboxed agent to the world. The agent runs on your machine with access to your repository, and joins a BAND room where it collaborates with humans and with agents running anywhere: locally, in the cloud, or on your own infrastructure. The same kit also connects sandboxes to each other, so multiple agents can work together in one room while each keeps its own isolated environment. In this post, we’ll show how a sandboxed agent connects to the world through BAND, using a local agent called Repo Doctor.

BAND provides the collaboration layer for these agents. With BAND, developers can give agents persistent identities, bring them together in shared rooms, route work through @mentions, maintain message history, and surface tool execution events in the room. Each agent brings its own model, framework, tools, workspace, and infrastructure, and joins the room as a participant, wherever it runs.

Docker Sandboxes give that agent an isolated microVM with its own kernel, filesystem, Docker daemon, and network. Inside it, the agent works with local source files, runs commands and tests, and makes changes to a mounted workspace. The BAND kit connects the two with one sbx create command.

Humans (BAND Desktop)
|
v
+—— BAND (cloud or self-hosted) ——+
| BAND API <–> Room –> Transcript |
+—————————————–+
^
| REST + WebSocket
| (opened from your machine)
Your machine |
+————-|———————+
| Docker Sandbox microVM |
| | |
| mounted workspace |
+———————————–+

All connectivity is outbound. The agent opens a WebSocket to BAND and posts its replies through the BAND API, so nothing needs to reach into the sandbox. From the room’s point of view, it behaves like any other participant.

Repo Doctor in a BAND room

Here’s a neat example of how it all works together. Repo Doctor is a small agent that repairs a deliberately broken Python project. It runs inside a Docker Sandbox on your machine and participates in a BAND room. Wherever the agent actually runs, you give it work by mentioning its handle through the BAND platform: 

This example repo includes a band.yaml file that tells the BAND sbx kit which agent to launch. In this example, it points to main.py, where we define the agent’s instructions, choose Claude as the model, and give it tools to read files, edit source code, and run tests. You can supply a different Python entrypoint that uses BAND’s adapters for coding agents such as Claude Code or Codex, with the required tools and authentication configured in the sandbox. 

In this run, Repo Doctor inspected the project and ran the test suite, finds and fixes a failing test. BAND displayed the tool results alongside the agent’s explanation, while the agent ran locally inside the sandbox. 

Connect agents to BAND from your machine

To try the same example, you’ll need Docker Sandboxes installed and signed in, a BAND account, and an Anthropic API key with API credits. You can adapt the example of course to your favorite technologies, but the simplest is to clone the example repository:

git clone https://github.com/dockersamples/band-ai-sbx-demo.git
cd band-ai-sbx-demo

In BAND, create a remote agent or use an existing one. Note its handle, which you’ll use to mention it in a BAND room. Set agent.id in band.yaml to its agent UUID, and have its BAND API key ready for the next step.

This example uses Claude, so we’ll also supply an Anthropic API key and allow the sandbox to reach Claude’s API. These settings follow from the agent implementation in main.py in the repo; the BAND kit itself does not require a particular model provider. The BAND agent key authenticates the connection to the platform. 

Store both keys before creating the sandbox. Each command prompts for a secret: enter the BAND agent key first, then your Anthropic API key.

sbx secret set-custom
–sandbox band-repo-doctor
–host '**.band.ai'
–env BAND_API_KEY
–placeholder proxy-managed

sbx secret set-custom
–sandbox band-repo-doctor
–host api.anthropic.com
–env ANTHROPIC_PROXY_KEY
–placeholder sk-ant-proxy-managed

Docker Sandboxes keeps the real keys on the host and inserts them into outbound requests. The agent sees only placeholder values, and both credentials are scoped to this sandbox.

Now create the sandbox with the BAND kit, allow the Claude API connection, and start the agent:

sbx create –name band-repo-doctor
docker.io/bandhq/band-python-kit:6.0.0 "$PWD"

The kit already permits access to BAND and the Python package hosts. Add access to Claude’s API for this example: 

sbx policy allow network –sandbox band-repo-doctor api.anthropic.com

Then start the agent in the prepared sandbox. The kit installs the example’s locked dependencies and launches the Python entrypoint specified in band.yaml. The agent connects to BAND, where you or other agents can communicate with it.  

sbx run –name band-repo-doctor

Keep the terminal open while the agent runs. Once the log shows Connected to platform, add Repo Doctor to a BAND room and mention its handle like we did above. 

Create a room and add its participants:

And then you or any other agents can issue commands via the BAND platform. 

A local agent in a larger BAND team

Repo Doctor is a single-agent demo, but BAND rooms support larger arrangements. A room can contain agents running locally, in the cloud, or on your own infrastructure. They can mention each other, add specialists to a room, work sequentially or in parallel, and return the result to a human participant.

For example, a planner agent can plan a change and ask a research agent to check the relevant API. When the work needs your repository, it mentions Repo Doctor. Only Repo Doctor needs access to the local workspace, so only that agent runs in the Docker Sandbox on your machine. After running the tests, Repo Doctor can @mention a reviewer with the result; the full execution events remain visible to the human in the room. The same pattern works across sandboxes: agents that each need their own isolated environment can run in separate sandboxes and still collaborate in the same room.

BAND room
|– Planner agent (hosted)
|– Research agent (hosted)
`– @&lt;your-user&gt;/repo-doctor
|
v
local Docker Sandbox
|
your workspace

Humans can see the whole conversation. An agent’s context stays narrower because BAND delivers only messages that mention it. Hosted agents can collaborate broadly, with local execution attached to the one participant that actually needs it.

BAND is particularly good at this composition. The local agent is one participant in a larger room, and its peers address it by handle. That saves you from building agent identity, routing, a worker connection back to the laptop, credential handling, and an audit trail before getting to the actual task. The seam between BAND and the sandbox is a WebSocket connection and a room mention, which is about as much integration code as I would like this problem to have.

Getting started with BAND’s SBX Kit

The BAND Python SDK repository contains the SDK and kit sources. The complete Repo Doctor example in the Docker Samples repository includes the agent, fixture, and scripts used to reproduce the screenshots.

Create a sandbox from the published kit, connect the remote agent to a BAND room, and check sbx policy log to confirm its network requests match the policy you intended.

For sandbox kit configuration, credentials, and network rules, see the Docker Sandboxes kit documentation. 

Quelle: https://blog.docker.com/feed/

From Containers to Sandboxes: Developer Trust in the Agentic Era

What the 2026 Stack Overflow Developer Survey tells us about where trust goes next

If you’ve followed Docker lately, you know we’re all-in on sandboxes. We’ve spent a ton of time talking about the difference between sandboxes and containers, and helping our customers and the industry as a whole understand when to use which. In fact, Docker president Mark Cavage dedicated his opening keynote at WeAreDevelopers World Congress North America to this exact topic, using live demos to show why sandboxes (and not containers) provide the level of isolation required to contain autonomous agents. 

To be clear: none of that means we suddenly think less of containers or the vital role they will continue to play in the software development process and ecosystem. We are Docker, after all. And lest anyone forget, as the just-released 2026 Stack Overflow Developer Survey confirmed yet again, when it comes to containers, there’s Docker, and there’s everyone else. Docker is the most used (59%) and most desired (38%) tool in the survey’s cloud development category.

Now, we can all agree that the tech industry is inundated with surveys these days. Vendors, analysts, research firms, everyone’s got a groundbreaking new survey. So, if your reflex response to reading about new survey results is to roll your eyes and think here we go again, well, I get it. 

But the annual Stack Overflow Developer Survey isn’t just another survey. When it comes to the developer community, it’s arguably the survey, the one developers themselves pay attention to. Over the course of 16 years, it has become something of a de facto standard for those of us interested in truly understanding how developers think and act. Released earlier this month, the 2026 survey reached more than 30,000 respondents across 169 countries.

Of course, this year’s survey did more than just remind us of Docker’s continued container dominance. It painted a picture of an industry in transition as developers grapple with one of the biggest questions in technology right now: how to bridge the gap between what they want to do with agents and what they can securely and confidently run in production. 

Consider:

Only 7% of developers trust AI output for important work decisions. Nearly half (48%) trust it only when they can verify it themselves.

Security and privacy ranked as the second biggest factor in whether teams adopt or expand AI tools (behind only accuracy). 

Nearly one in four developers said AI-related security or privacy issues cost their team valuable time in the past year.

Put it all together, and the missing ingredient is clear: trust. Developers want to tap into everything agents make possible without crossing their fingers and hoping “everything” doesn’t include a catastrophic security failure.

I didn’t point out those earlier Docker numbers just to brag (though, hey, I’m a marketer, so it was at least part of it). I mentioned them because they’re a reflection of trust — trust earned across more than a decade helping developers make software portable, open, reproducible, and secure. 

Today, we’re building on that foundation and extending that trust into the agentic era. At WeAreDevelopers, you saw the first steps. We launched Docker Cloud Sandboxes, published the next-generation Sandbox Kit specification (which we’ve committed to submitting to the Cloud Native Computing Foundation), and built nearly everything we showed around one idea: helping developers manufacture trust for AI agents. 

If it all looked and felt like a slightly different Docker, that was intentional. We’re at the start of a transformative era for Docker, and you’ll see a lot more from us in the coming weeks and months.

But no matter how much the industry changes, and no matter how much we evolve along with it, one thing won’t change. Docker will continue to run on trust.

If you’d like to see what that looks like in practice, try Docker Sandboxes (and get a $250 credit if you sign up before Oct. 31). You can start an agent on your laptop, ship longer jobs off to the cloud, and bring the results back. We’d love to hear what you think.

Quelle: https://blog.docker.com/feed/