Skip to content

Instantly share code, notes, and snippets.

@groundnuty
Forked from u8sand/docker-patch
Created December 6, 2022 20:04
Show Gist options
  • Save groundnuty/08661a0608851ce56e19f1c91b47c952 to your computer and use it in GitHub Desktop.
Save groundnuty/08661a0608851ce56e19f1c91b47c952 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=$1
NEW_IMAGE=$2
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
docker commit -c "CMD ${IMAGE_CMD}" ${CONTAINER} ${NEW_IMAGE}
elif [ "${IMAGE_CMD}" == "null" ]; then
docker commit -c "ENTRYPOINT ${IMAGE_ENTRYPOINT}" -c "CMD []" ${CONTAINER} ${NEW_IMAGE}
else
docker commit -c "ENTRYPOINT ${IMAGE_ENTRYPOINT}" -c "CMD ${IMAGE_CMD}" ${CONTAINER} ${NEW_IMAGE}
fi
}
ARG=$1
shift
if [ "${ARG}" == "start" ]; then
docker_patch_start $@
elif [ "${ARG}" == "commit" ]; then
docker_patch_commit $@
else
docker_patch_usage
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment