Update a docker run container with a conservative workflow.
Require both of these from the user:
container_namerecreate_commandTreat recreate_command as the source of truth. Do not try to reconstruct missing flags from docker inspect.
Support only containers originally managed by docker run.
Do not use this skill for:
docker composedocker system pruneAlways compare image Id values, not repo digests.
Use this exact logic:
Read current image Id from the running container: bash
docker inspect -f '{{.Image}}' <container_name>
Extract the image reference from recreate_command.
Pull the latest version of that image: bash
docker pull <image>
Read the latest local image Id: bash
docker image inspect <image> --format '{{.Id}}'
Recreate the container only if the two Id values differ.
Before any destructive action, restate the exact recreate command that will be used.
If recreate_command is missing, ambiguous, or not clearly a docker run command, stop and ask the user to provide a valid full command.
If the image cannot be extracted from recreate_command, stop and ask the user to provide the image explicitly inside the command.
Never silently modify the recreate command.
Prefer this sequence when update is needed:
bash
docker stop <container_name>
docker rm <container_name>
<recreate_command>
Before using it, verify all of the following:
docker runIf the command includes an inline container command after the image, preserve it exactly.
If the command is multiline, preserve it exactly.
Confirm the target container name.
Echo back the exact recreate command.
Extract the image from the recreate command.
Compare current image Id and latest pulled image Id.
If Ids match, report that the container is already up to date and do nothing else.
If Ids differ:
docker stop <container_name>docker rm <container_name>recreate_commandVerify startup with: bash
docker ps --filter name=<container_name>
docker inspect <container_name>
docker logs --tail 100 <container_name>
Report status clearly, including whether healthcheck is healthy, starting, or absent.
Use the bundled script when you want a deterministic check/apply flow:
bash
python3 scripts/update_docker_run_container.py \
--container-name <container_name> \
--recreate-command '<full docker run command>'
Add --apply only when the user has approved the exact recreate command and actual recreation should happen.
The script will:
recreate_commandWhen reporting results, include:
Input:
container_name: my-container
recreate_command:
bash
docker run -d --network host --name my-container --restart unless-stopped -v example_data:/data -v example_certs:/etc/ssl/certs -e DB_HOST=<db_host> -e DB_PORT=<db_port> -e DB_NAME=<db_name> -e DB_USER=<db_user> -e DB_PASSWORD=<db_password> --health-cmd="/bin/check-health" --health-interval=600s --health-retries=5 --health-timeout=3s example/image:latest
Expected behavior:
example/image:latestWhen users ask to "update container X", prefer asking for the original docker run command unless it is already documented in memory or provided in the current request.
If the user has a known fixed recreate command for a specific container, prefer using that exact command unchanged.