Setting up apigee local dev

i am trying to setup apigee with local docker i am using 1.15.2 emulator version once i am trying to install the emulator it started the docker image which i can see but in vscode i am getting below error :

Error: Could not find the newly created container 1.15.2-local

Hi @supriyokumar274 ,

You’re hitting a known issue with Cloud Code’s Apigee emulator integration, where the container is successfully created in Docker, but VS Code fails to detect it due to internal tracking expectations.

What’s actually happening
Cloud Code does not just look for a running container by name — it expects:

  • A container it created itself
  • With specific labels and metadata
  • Matching its internal lifecycle tracking

In your case:

  • The container (1.15.2-local) is clearly running (docker container ls)
  • But Cloud Code throws:
Could not find the newly created container 1.15.2-local

This indicates a state mismatch, not a runtime failure.

Most likely causes

  1. Stale container from previous attempts
  2. Container created outside Cloud Code control
  3. Missing expected Docker labels
  4. Race condition during startup detection

Recommended fix (clean reset)
Run the following:

docker stop 1.15.2-local
docker rm 1.15.2-local
docker rmi gcr.io/apigee-release/hybrid/apigee-emulator:1.15.2

Then:

  1. Restart VS Code
  2. Reinstall via:
Cloud Code → Apigee → Install Emulator

Note: Do NOT start the container manually

Additional checks
If the issue persists:

  • Inspect container labels:
docker inspect 1.15.2-local

Cloud Code expects specific labels — if missing, it won’t recognize the container.

  • Try attaching manually:
Cloud Code → Apigee → Attach to Emulator

Important note
If your container is running and mapped (e.g. localhost:8998 responds), then:

The emulator is working — the issue is purely with VS Code detection, not Docker or Apigee itself.

Summary
This is a Cloud Code container discovery issue, typically caused by stale state or mismatch in expected metadata. A clean reinstall via VS Code usually resolves it.

Regards,
LAVIQ

hey i tried same reinstall docker and everything , i tried below command also :

ocker inspect apigee-local
[
{
“Id”: “a705a31d2378876d433d2f56a288ff70e2a987ee410cbf6937d0ea46d2eeff25”,
“Created”: “2026-03-26T09:47:46.27975572Z”,
“Path”: “/usr/bin/dumb-init”,
“Args”: [
“/bin/bash”,
“/opt/apigee/emulator-entry.sh”
],
“State”: {
“Status”: “running”,
“Running”: true,
“Paused”: false,
“Restarting”: false,
“OOMKilled”: false,
“Dead”: false,
“Pid”: 714,
“ExitCode”: 0,
“Error”: “”,
“StartedAt”: “2026-03-26T09:47:51.776863792Z”,
“FinishedAt”: “0001-01-01T00:00:00Z”
},
“Image”: “sha256:a3d92e94aceca19cf3bd4f87fea0fe021d1815566ddd3f533da81d0eb38876b2”,
“ResolvConfPath”: “/var/lib/docker/containers/a705a31d2378876d433d2f56a288ff70e2a987ee410cbf6937d0ea46d2eeff25/resolv.conf”,
“HostnamePath”: “/var/lib/docker/containers/a705a31d2378876d433d2f56a288ff70e2a987ee410cbf6937d0ea46d2eeff25/hostname”,
“HostsPath”: “/var/lib/docker/containers/a705a31d2378876d433d2f56a288ff70e2a987ee410cbf6937d0ea46d2eeff25/hosts”,
“LogPath”: “/var/lib/docker/containers/a705a31d2378876d433d2f56a288ff70e2a987ee410cbf6937d0ea46d2eeff25/a705a31d2378876d433d2f56a288ff70e2a987ee410cbf6937d0ea46d2eeff25-json.log”,
“Name”: “/apigee-local”,
“RestartCount”: 0,
“Driver”: “overlayfs”,
“Platform”: “linux”,
“MountLabel”: “”,
“ProcessLabel”: “”,
“AppArmorProfile”: “”,
“ExecIDs”: null,
“HostConfig”: {
“Binds”: null,
“ContainerIDFile”: “”,
“LogConfig”: {
“Type”: “json-file”,
“Config”: {}
},
“NetworkMode”: “bridge”,
“PortBindings”: {
“8080/tcp”: [
{
“HostIp”: “”,
“HostPort”: “8080”
}
],
“8998/tcp”: [
{
“HostIp”: “”,
“HostPort”: “8998”
}
]
},
“RestartPolicy”: {
“Name”: “no”,
“MaximumRetryCount”: 0
},
“AutoRemove”: false,
“VolumeDriver”: “”,
“VolumesFrom”: null,
“ConsoleSize”: [
0,
0
],
“CapAdd”: null,
“CapDrop”: null,
“CgroupnsMode”: “private”,
“Dns”: [
“8.8.8.8”
],
“DnsOptions”: ,
“DnsSearch”: ,
“ExtraHosts”: null,
“GroupAdd”: null,
“IpcMode”: “private”,
“Cgroup”: “”,
“Links”: null,
“OomScoreAdj”: 0,
“PidMode”: “”,
“Privileged”: true,
“PublishAllPorts”: false,
“ReadonlyRootfs”: false,
“SecurityOpt”: [
“label=disable”
],
“UTSMode”: “”,
“UsernsMode”: “”,
“ShmSize”: 67108864,
“Runtime”: “runc”,
“Isolation”: “”,
“CpuShares”: 0,
“Memory”: 0,
“NanoCpus”: 0,
“CgroupParent”: “”,
“BlkioWeight”: 0,
“BlkioWeightDevice”: ,
“BlkioDeviceReadBps”: ,
“BlkioDeviceWriteBps”: ,
“BlkioDeviceReadIOps”: ,
“BlkioDeviceWriteIOps”: ,
“CpuPeriod”: 0,
“CpuQuota”: 0,
“CpuRealtimePeriod”: 0,
“CpuRealtimeRuntime”: 0,
“CpusetCpus”: “”,
“CpusetMems”: “”,
“Devices”: ,
“DeviceCgroupRules”: null,
“DeviceRequests”: null,
“MemoryReservation”: 0,
“MemorySwap”: 0,
“MemorySwappiness”: null,
“OomKillDisable”: null,
“PidsLimit”: null,
“Ulimits”: ,
“CpuCount”: 0,
“CpuPercent”: 0,
“IOMaximumIOps”: 0,
“IOMaximumBandwidth”: 0,
“MaskedPaths”: null,
“ReadonlyPaths”: null
},
“Storage”: {
“RootFS”: {
“Snapshot”: {
“Name”: “overlayfs”
}
}
},
“Mounts”: [
{
“Type”: “volume”,
“Name”: “4e5409671df6887eedc2258ce864d70db681f1bdf7d9b0dbdc6e2905d796b761”,
“Source”: “/var/lib/docker/volumes/4e5409671df6887eedc2258ce864d70db681f1bdf7d9b0dbdc6e2905d796b761/_data”,
“Destination”: “/opt/apigee/apigee-cassandra”,
“Driver”: “local”,
“Mode”: “”,
“RW”: true,
“Propagation”: “”
}
],
“Config”: {
“Hostname”: “a705a31d2378”,
“Domainname”: “”,
“User”: “apigee”,
“AttachStdin”: false,
“AttachStdout”: false,
“AttachStderr”: false,
“ExposedPorts”: {
“7000/tcp”: {},
“7001/tcp”: {},
“7199/tcp”: {},
“8080/tcp”: {},
“8998/tcp”: {},
“9042/tcp”: {},
“9160/tcp”: {}
},
“Tty”: false,
“OpenStdin”: false,
“StdinOnce”: false,
“Env”: [
“XTERM=xterm-256color”,
“PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin:/opt/apigee/apigee-cassandra/bin”,
“SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt”,
“LANG=C.UTF-8”,
“JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64”,
“CASSANDRA_HOME=/opt/apigee/apigee-cassandra”,
“CASSANDRA_CONF=/opt/apigee/apigee-cassandra/conf”,
“CASSANDRA_DATA=/opt/apigee/data/apigee-cassandra”,
“CASSANDRA_SCRIPT=/opt/apigee/apigee-cassandra/scripts/”,
“CASSANDRA_LOGS=/var/log/cassandra”,
“APIGEE_CASSANDRA_CLUSTER_NAME=”,
“CASSANDRA_VERSION=4.0.12”,
“APPLICATION=emulator”,
“APIGEE_PREFIX=apigee-”,
“APIGEE_APPLICATION=apigee-emulator”,
“APIGEE_ROOT=/opt/apigee”,
“APIGEE_HOME=/opt/apigee”,
“APIGEE_DATA=/opt/apigee/data”,
“APIGEE_VAR_DIR=/opt/apigee/var”,
“APIGEE_APP_DATADIR=/opt/apigee/data/apigee-emulator”,
“APIGEE_APP_LOGDIR=/opt/apigee/var/log/apigee-emulator”,
“CASSANDRA_DATA_DIR=/opt/apigee/data/apigee-cassandra”,
“COMPONENT_NAME=apigee-emulator”,
“COMPONENT_ROOT=/opt/apigee/apigee-emulator”,
“COMPONENT_BIN=/opt/apigee/apigee-emulator/bin”,
“COMPONENT_LIB=/opt/apigee/apigee-emulator/lib”,
“RUN_USER=apigee”,
“RUN_GROUP=apigee”,
“microkernel_installType=hybrid”,
“microkernel_application=emulator”,
“APIGEE_ORG=hybrid”,
“APIGEE_ENV=test”,
“LISTEN_ADDRESS=127.0.0.1”,
“GOOGLE_APPLICATION_CREDENTIALS=”,
“FORWARD_PROXY=”,
“APIGEE_CASSANDRA_LISTEN_ADDRESS=127.0.0.1”,
“CASSANDRA_DC=dc-1”,
“CASSANDRA_RACK=rack-1”
],
“Cmd”: null,
“Image”: “Artifact Registry documentation  |  Google Cloud Documentation,
“Volumes”: {
“/opt/apigee/apigee-cassandra”: {}
},
“WorkingDir”: “/opt/apigee/”,
“Entrypoint”: [
“/usr/bin/dumb-init”,
“/bin/bash”,
“/opt/apigee/emulator-entry.sh”
],
“Labels”: {
“com.apigee.hybrid_planet.name”: “”,
“maintainer”: “edgefeatureplatform@google.com”,
“org.label-schema.build-date”: “”,
“org.label-schema.docker.dockerfile”: “/Dockerfile”,
“org.label-schema.license”: “Apache License 2.0”,
“org.label-schema.name”: “k8s-for-greeks/docker-cassandra-k8s”,
“org.label-schema.url”: “https://github.com/k8s-for-greeks/”,
“org.label-schema.vcs-ref”: “”,
“org.label-schema.vcs-type”: “Git”,
“org.label-schema.vcs-url”: “https://github.com/k8s-for-greeks/docker-cassandra-k8s”
},
“StopTimeout”: 1
},
“NetworkSettings”: {
“SandboxID”: “de7f1969b25e3e87ace0514cf6443504da0d3c4dc86ae13fa878e085c0bfeab8”,
“SandboxKey”: “/var/run/docker/netns/de7f1969b25e”,
“Ports”: {
“8080/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “8080”
},
{
“HostIp”: “::”,
“HostPort”: “8080”
}
],
“8998/tcp”: [
{
“HostIp”: “0.0.0.0”,
“HostPort”: “8998”
},
{
“HostIp”: “::”,
“HostPort”: “8998”
}
]
},
“Networks”: {
“bridge”: {
“IPAMConfig”: null,
“Links”: null,
“Aliases”: null,
“DriverOpts”: null,
“GwPriority”: 0,
“NetworkID”: “7cae15b82d3af42c93f4512be6767ce5a6cef3ce17efb17b87b5cf9fd23ff5ed”,
“EndpointID”: “4f040f2fa2841d92d28d8eb210ab7ba99d3ebdb57a61129ec240d11f22a89ad2”,
“Gateway”: “172.17.0.1”,
“IPAddress”: “172.17.0.2”,
“MacAddress”: “3a:5f:07:e6:83:36”,
“IPPrefixLen”: 16,
“IPv6Gateway”: “”,
“GlobalIPv6Address”: “”,
“GlobalIPv6PrefixLen”: 0,
“DNSNames”: null
}
}
},
“ImageManifestDescriptor”: {
“mediaType”: “application/vnd.docker.distribution.manifest.v2+json”,
“digest”: “sha256:a3d92e94aceca19cf3bd4f87fea0fe021d1815566ddd3f533da81d0eb38876b2”,
“size”: 5963,
“platform”: {
“architecture”: “amd64”,
“os”: “linux”
}
}
}
]

but still same issue , its not able to recognize i tried Cloud Code → Apigee → Attach to Emulator manually but how to attach manually i am not able to see any option like this

Hi @supriyokumar274,

Thanks for sharing the full docker inspect output — that helps a lot.

At this point, it’s clear this is not an Apigee emulator startup issue. The container is running correctly. The problem is specifically with Cloud Code’s container discovery mechanism.

Key observation

From your inspect output:

"Name": "/apigee-local"

But earlier, Cloud Code was trying to find:

1.15.2-local

This mismatch is the root cause.

Cloud Code does not simply detect any running emulator container — it expects a container with:

  • a specific name (generated during install)
  • a matching internal state (tracked by the extension)

If those don’t align, you get:
Could not find the newly created container

Why this happens

Even after reinstalling Docker, this can still occur because:

  • Cloud Code caches state internally
  • Container name differs from what Cloud Code expects
  • Previous failed install attempt left stale metadata
  • Emulator container is created, but not registered in extension lifecycle

Your output confirms:

  • Container is healthy
  • Ports are exposed
  • Emulator entrypoint is correct

So the issue is **purely VS Code ↔ Docker state mismatch

What actually fixes it**

A full reset needs to include Docker + Cloud Code state, not just Docker.

1. Remove ALL Apigee containers

docker ps -a
docker stop apigee-local 2>/dev/null
docker rm apigee-local 2>/dev/null
docker stop 1.15.2-local 2>/dev/null
docker rm 1.15.2-local 2>/dev/null

2. Remove volumes (important)
Your inspect shows a Cassandra volume — this can preserve stale state:
docker volume prune

3. Clear Cloud Code extension state (critical step)

Completely quit VS Code, then remove cached state:

macOS paths:

~/Library/Application Support/Code/User/globalStorage
~/Library/Application Support/Code/User/workspaceStorage

Delete folders related to:

cloudcode
google
apigee

4. Reinstall Cloud Code extension
Not just reload — uninstall and reinstall.

5. Verify Docker context
Make sure VS Code and the terminal use same daemon:
docker context show

6. Reinstall emulator ONLY via VS Code
Do NOT run docker manually.

Important takeaway

Your emulator is already working at Docker level.

If you hit:

http://localhost:8998

and it responds, then:

The failure is entirely in Cloud Code’s detection logic, not the emulator itself.

If after all this, Cloud Code still looks for 1.15.2-local while Docker creates apigee-local, then this is very likely:

A Cloud Code bug specific to emulator 1.15.2

In that case, checking the Cloud Code output logs in VS Code will show exactly what container name it expects — that’s usually the final clue.

Regards,
LAVIQ
(https://www.getlaviq.com/)

This usually happens when VS Code (or the emulator script) is looking for a container name that didn’t actually get created or has a different name.

Quick things to check:

  1. Run docker ps -a and see the exact container name.→ Make sure it matches 1.15.2-local.

  2. If it’s different, remove old containers and retry:

    docker rm -f $(docker ps -aq)

    then reinstall/start the emulator.

  3. Make sure Docker is fully running before you start Apigee.

  4. Try running the emulator from terminal (not VS Code) to see full logs:

    apigee-emulator start

    Most of the time it’s just a naming mismatch or leftover containers. Clean start usually fixes it.

sorry for late after perform all the steps still i am facing same issue kindly find below ss as container is. created :

but in vs code same issue is there :

I have the same issue and it looks like the issue is related to this:

https://discuss.google.dev/t/apigee-emulator-and-cloud-code-extension-not-connecting/289957/9

I am very confused by how the situation with Cloud Code is now, and this is very unfortunate. Gemini Code Assist can’t be uninstalled without uninstalling also Cloud Code!

Unanswered questions: will Apigee features be integrated into Antigravity? Will this bug (not supporting docker > 29) also be in the upcoming Antigravity IDE or will it be fixed there? Poor communication, unfixed bugs, archived repository linked everywhere about Apigee development is just very confusing for the customers.

Worth mention: this is easily reproducible in Cloud Shell … You can open/create an Apigee workspace and when trying to launch the emulator the error presented will be the same.

After quite a lot of troubleshooting, I found this:

According to my debugging of how Cloud Code for VS Code extension invokes docker, this is the root cause of the extension not being able to provision the emulator. In fact, it provisions it, but fails to identify the running emulators because the docker images command no longer outputs in the same format. This is poor design choice on the extension developers side… since using a --format=“” flag should be the preferred choice to output only the ID of the image of interest and not parse/rely on the output of the default format.

Anyways, after creating this file: ~/.docker/config.json with the value bellow appended to it:

{
    "imagesFormat": "table"
}

the Cloud Shell IDE worked properly and I assume that this should fix other situations where the issue happens as well.