How to execute MySQL command from the host to container running MySQL server?

前端 未结 9 1890
春和景丽
春和景丽 2021-01-30 06:31

I have followed the instruction in https://registry.hub.docker.com/_/mysql/ to pull an image and running a container in which it runs a MySQL server.

The container is run

9条回答
  •  無奈伤痛
    2021-01-30 07:23

    I use the following to create a command that will sort out at least a couple of cases with databases outside or inside the container (with -h and -P) and supporting -e:

    cat > ~/bin/mysql <<'EOF'
    #/bin/bash
    
    MARGS=()
    MPORT="3306"
    
    while test $# != 0; do
      if [[ $1 == -h ]]; then MHOST=$2; shift;
      elif [[ $1 == -h* ]]; then MHOST=${1#"-h"};
      elif [[ $1 == -e ]]; then MEXEC=$2; shift;
      elif [[ $1 == -e* ]]; then MEXEC=${1#"-e"};
      elif [[ $1 == --execute=* ]]; then MEXEC=${1#"--execute="};
      elif [[ $1 == -P ]]; then MPORT=$2; shift;
      elif [[ $1 == -P* ]]; then MPORT=${1#"-P"};
      else MARGS="$MARGS $1"
      fi
    
      shift;
    done
    
    if [ -z  "${MHOST+x}" ]; then
       MHOST=localhost
    fi
    
    if [ $(docker inspect --format '{{ .State.Status }}' mysql) == "running" ]; then
     if [ ! -z "${MHOST+x}" ]; then
        if [ "$MHOST" == "localhost" -o "$MHOST" == "127.0.0.1" ]; then
          CPORT=$(docker port mysql 3306/tcp)
          if [ ${CPORT#"0.0.0.0:"} == $MPORT ]; then
            #echo "aiming for container port ($MPORT -> $CPORT)";
            MHOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' mysql);
          else
            MHOST=$(ifconfig | sed -En 's/127.0.0.1//;s/.*inet (addr:)?(([0-9]*\.){3}[0-9]*).*/\2/p' | head -1);
          fi
        fi
      fi
    fi
    
    if [ -z "$MEXEC" ]; then
       docker run --link mysql:mysql -i --rm mysql mysql "-h" $MHOST "-P" $MPORT $MARGS
    else
       docker run --link mysql:mysql -i --rm mysql mysql "-h" $MHOST "-P" $MPORT $MARGS <<< $MEXEC
    fi
    EOF
    chmod +x ~/bin/mysql
    

提交回复
热议问题