# Notes: save this script into `~/.bashrc_docker`
#   put this line `[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker` into ~/.bashrc

# 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
}
