Last active
December 6, 2022 20:04
-
-
Save u8sand/1370fe604e6eafd825acb14ac6676273 to your computer and use it in GitHub Desktop.
A helper script for patching docker images
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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