mirror of
				https://github.com/yeasy/docker_practice.git
				synced 2025-11-04 03:41:34 +00:00 
			
		
		
		
	resolve invalid option error and able to find nsenter automatically if it has been installed with path notified
		
			
				
	
	
		
			50 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# Some useful commands to use docker.
 | 
						|
# Author: yeasy@github
 | 
						|
# Created:2014-09-25
 | 
						|
 | 
						|
alias docker-pid="sudo docker inspect --format '{{.State.Pid}}'"
 | 
						|
alias docker-ip="sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}'"
 | 
						|
 | 
						|
#the implementation refs from https://github.com/jpetazzo/nsenter/blob/master/docker-enter
 | 
						|
function docker-enter() {
 | 
						|
    #if [ -e $(dirname "$0")/nsenter ]; then
 | 
						|
    #Change for centos bash running
 | 
						|
    if [ -e $(dirname '$0')/nsenter ]; then
 | 
						|
        # with boot2docker, nsenter is not in the PATH but it is in the same folder
 | 
						|
        NSENTER=$(dirname "$0")/nsenter
 | 
						|
    else
 | 
						|
        # if nsenter has already been installed with path notified, here will be clarified
 | 
						|
        NSENTER=$(which nsenter)
 | 
						|
        #NSENTER=nsenter
 | 
						|
    fi
 | 
						|
    [ -z "$NSENTER" ] && echo "WARN Cannot find nsenter" && return
 | 
						|
 | 
						|
    if [ -z "$1" ]; then
 | 
						|
        echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
 | 
						|
        echo ""
 | 
						|
        echo "Enters the Docker CONTAINER and executes the specified COMMAND."
 | 
						|
        echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
 | 
						|
    else
 | 
						|
        PID=$(sudo docker inspect --format "{{.State.Pid}}" "$1")
 | 
						|
        if [ -z "$PID" ]; then
 | 
						|
            echo "WARN Cannot find the given container"
 | 
						|
            return
 | 
						|
        fi
 | 
						|
        shift
 | 
						|
 | 
						|
        OPTS="--target $PID --mount --uts --ipc --net --pid"
 | 
						|
 | 
						|
        if [ -z "$1" ]; then
 | 
						|
            # No command given.
 | 
						|
            # Use su to clear all host environment variables except for TERM,
 | 
						|
            # initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
 | 
						|
            # and start a login shell.
 | 
						|
            #sudo $NSENTER "$OPTS" su - root
 | 
						|
            sudo $NSENTER --target $PID --mount --uts --ipc --net --pid su - root
 | 
						|
        else
 | 
						|
            # Use env to clear all host environment variables.
 | 
						|
            sudo $NSENTER --target $PID --mount --uts --ipc --net --pid env -i $@
 | 
						|
        fi
 | 
						|
    fi
 | 
						|
}
 |