Skip to content

Instantly share code, notes, and snippets.

@u8sand
Last active July 25, 2025 00:28
Show Gist options
  • Save u8sand/1370fe604e6eafd825acb14ac6676273 to your computer and use it in GitHub Desktop.
Save u8sand/1370fe604e6eafd825acb14ac6676273 to your computer and use it in GitHub Desktop.
A helper script for patching docker images
#!/bin/bash
# Dependencies:
# - docker (obviously)
# - jq (json parsing)
docker_patch_usage() {
echo 'Usage: docker-patch'
echo ' CONTAINER=$(docker-patch start your/tag)'
echo ' # apply patch to $CONTAINER (docker container)'
echo ' docker-patch commit ${CONTAINER} your/patched-tag'
}
docker_patch_start() {
IMAGE=$1
IMAGE_ENTRYPOINT=$(docker inspect ${IMAGE} | jq -rc '.[0] | .Config.Entrypoint')
IMAGE_CMD=$(docker inspect ${IMAGE} | jq -rc '.[0] | .Config.Cmd')
if [ "${IMAGE_ENTRYPOINT}" == "null" ]; then
docker run -id ${IMAGE} /bin/sh
elif [ "${IMAGE_CMD}" == "null" ]; then
docker run --entrypoint= -id ${IMAGE} /bin/sh
else
docker run --entrypoint= -id ${IMAGE} /bin/sh
fi
}
docker_patch_commit() {
CONTAINER="${@: -2:1}"
NEW_IMAGE="${@: -1:1}"
IMAGE=$(docker inspect ${CONTAINER} | jq -rc '.[0].Config.Image')
IMAGE_ENTRYPOINT=$(docker inspect ${IMAGE} | jq -rc '.[0] | .Config.Entrypoint')
IMAGE_CMD=$(docker inspect ${IMAGE} | jq -rc '.[0] | .Config.Cmd')
if [ "${IMAGE_ENTRYPOINT}" == "null" ]; then
set -- "${@:1:$#-2}" -c "CMD ${IMAGE_CMD}" "${CONTAINER}" "${NEW_IMAGE}"
docker commit "$@"
elif [ "${IMAGE_CMD}" == "null" ]; then
set -- "${@:1:$#-2}" -c "ENTRYPOINT ${IMAGE_ENTRYPOINT}" -c "CMD []" "${CONTAINER}" "${NEW_IMAGE}"
docker commit "$@"
else
set -- "${@:1:$#-2}" -c "ENTRYPOINT ${IMAGE_ENTRYPOINT}" -c "CMD ${IMAGE_CMD}" "${CONTAINER}" "${NEW_IMAGE}"
docker commit "$@"
fi
}
ARG=$1
shift
if [ "${ARG}" == "start" ]; then
docker_patch_start "$@"
elif [ "${ARG}" == "commit" ]; then
docker_patch_commit "$@"
else
docker_patch_usage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment