Last active
          July 25, 2025 00:28 
        
      - 
      
 - 
        
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="${@: -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