windows7安裝docker異常:looks like something went wrong in step ‘looking for vboxmanage.exe’


一、背景

最近准備抽點時間研究下docker,選擇在家中的windows系統上安裝。

我的系統是windows7,首先安裝Docker Toolbox,Docker Toolbox是一個工具集,主要包含如下內容:

Docker CLI 客戶端,用來運行docker引擎創建鏡像和容器
Docker Machine. 可以讓你在windows的命令行中運行docker引擎命令
Docker Compose. 用來運行docker-compose命令
Kitematic. 這是Docker的GUI版本
Docker QuickStart shell. 這是一個已經配置好Docker的命令行環境
Oracle VM Virtualbox. 虛擬機

安裝完之后,桌面得到如下內容:

此時,通過雙擊Docker Quickstart Termimal啟動。

二、問題

1、問題:looks like something went wrong in step ‘looking for vboxmanage.exe’

一切進行順利,直到。。。在終端出現如下異常:looks like something went wrong in step ‘looking for vboxmanage.exe’

常規心態:一般出現這種找不到文件的異常都是因為安裝目錄有問題導致,所以首先看下Docker Quickstart Termimal是從哪里創建的快捷方式,右鍵->屬性

緊跟路徑,打開腳本文件start.sh,發現了異常提示是出現在地20行,如下所示:

 直觀感覺就是由於變量“${VBOX_MSI_INSTALL_PATH}”,或者變量“${VBOX_INSTALL_PATH}”獲取異常導致,首先查看環境變量,是否該變量沒有寫入

發現一切正常,那就通過打印這個變量的值來驗證下這個想法,使用最暴力直接的方法,輸出變量“${VBOX_MSI_INSTALL_PATH}”,為了防止腳本繼續執行,通過read斷點

再次運行Docker Quickstart Termimal,結果如下:

發現變量正常解析,那么問題可能不在這里,繼續向下斷點排查,直到這里

問題直接指向變量"${DOCKER_MACHINE}"獲取異常,而該變量是在腳本第18行定義:DOCKER_MACHINE="${DOCKER_TOOLBOX_INSTALL_PATH}\docker-machine.exe",使用相同的方法,輸出變量${DOCKER_TOOLBOX_INSTALL_PATH}

很明顯,該變量獲取為空,我的docker-machine.exe是安裝在“D:\usr\Docker Toolbox\”,所以直接修改腳本:

同樣,將腳本中該變量全部替換為具體路徑,再次運行Docker Quickstart Termimal,問題解決,其他一切順利!

三、其他

附上我個人使用的腳本代碼,替換掉響應路徑即可

  1 #!/bin/bash
  2 trap '[ "$?" -eq 0 ] || read -p "Looks like something went wrong in step ´$STEP´... Press any key to continue..."' EXIT
  3 
  4 #Quick Hack: used to convert e.g. "C:\Program Files\Docker Toolbox" to "/c/Program Files/Docker Toolbox"
  5 win_to_unix_path(){ 
  6   wd="$(pwd)"
  7   cd "$1"
  8     the_path="$(pwd)"
  9   cd "$wd"
 10   echo $the_path
 11 }
 12 
 13 # This is needed  to ensure that binaries provided
 14 # by Docker Toolbox over-ride binaries provided by
 15 # Docker for Windows when launching using the Quickstart.
 16 export PATH="D:\usr\Docker Toolbox:$PATH"
 17 VM=${DOCKER_MACHINE_NAME-default}
 18 DOCKER_MACHINE="D:\usr\Docker Toolbox\docker-machine.exe"
 19 
 20 STEP="Looking for vboxmanage.exe"
 21 if [ ! -z "$VBOX_MSI_INSTALL_PATH" ]; then
 22   VBOXMANAGE="${VBOX_MSI_INSTALL_PATH}VBoxManage.exe"
 23 else
 24   VBOXMANAGE="${VBOX_INSTALL_PATH}VBoxManage.exe"
 25 fi
 26 
 27 BLUE='\033[1;34m'
 28 GREEN='\033[0;32m'
 29 NC='\033[0m'
 30 
 31 #clear all_proxy if not socks address
 32 if  [[ $ALL_PROXY != socks* ]]; then
 33   unset ALL_PROXY
 34 fi
 35 if  [[ $all_proxy != socks* ]]; then
 36   unset all_proxy
 37 fi
 38 
 39 if [ ! -f "${DOCKER_MACHINE}" ]; then
 40   echo "Docker Machine is not installed. Please re-run the Toolbox Installer and try again."
 41   exit 1
 42 fi
 43 
 44 if [ ! -f "${VBOXMANAGE}" ]; then
 45   echo "VirtualBox is not installed. Please re-run the Toolbox Installer and try again."
 46   exit 1
 47 fi
 48 
 49 "${VBOXMANAGE}" list vms | grep \""${VM}"\" &> /dev/null
 50 VM_EXISTS_CODE=$?
 51 
 52 set -e
 53 
 54 STEP="Checking if machine $VM exists"
 55 if [ $VM_EXISTS_CODE -eq 1 ]; then
 56   "${DOCKER_MACHINE}" rm -f "${VM}" &> /dev/null || :
 57   rm -rf ~/.docker/machine/machines/"${VM}"
 58   #set proxy variables if they exists
 59   if [ "${HTTP_PROXY}" ]; then
 60     PROXY_ENV="$PROXY_ENV --engine-env HTTP_PROXY=$HTTP_PROXY"
 61   fi
 62   if [ "${HTTPS_PROXY}" ]; then
 63     PROXY_ENV="$PROXY_ENV --engine-env HTTPS_PROXY=$HTTPS_PROXY"
 64   fi
 65   if [ "${NO_PROXY}" ]; then
 66     PROXY_ENV="$PROXY_ENV --engine-env NO_PROXY=$NO_PROXY"
 67   fi
 68   "${DOCKER_MACHINE}" create -d virtualbox $PROXY_ENV "${VM}"
 69 fi
 70 
 71 STEP="Checking status on $VM"
 72 VM_STATUS="$( set +e ; "${DOCKER_MACHINE}" status "${VM}" )"
 73 if [ "${VM_STATUS}" != "Running" ]; then
 74   "${DOCKER_MACHINE}" start "${VM}"
 75   yes | "${DOCKER_MACHINE}" regenerate-certs "${VM}"
 76 fi
 77 
 78 STEP="Setting env"
 79 eval "$("${DOCKER_MACHINE}" env --shell=bash --no-proxy "${VM}" | sed -e "s/export/SETX/g" | sed -e "s/=/ /g")" &> /dev/null #for persistent Environment Variables, available in next sessions
 80 eval "$("${DOCKER_MACHINE}" env --shell=bash --no-proxy "${VM}")" #for transient Environment Variables, available in current session
 81 
 82 STEP="Finalize"
 83 clear
 84 cat << EOF
 85 
 86 
 87                         ##         .
 88                   ## ## ##        ==
 89                ## ## ## ## ##    ===
 90            /"""""""""""""""""\___/ ===
 91       ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
 92            \______ o           __/
 93              \    \         __/
 94               \____\_______/
 95 
 96 EOF
 97 echo -e "${BLUE}docker${NC} is configured to use the ${GREEN}${VM}${NC} machine with IP ${GREEN}$("${DOCKER_MACHINE}" ip ${VM})${NC}"
 98 echo "For help getting started, check out the docs at https://docs.docker.com"
 99 echo
100 echo 
101 #cd #Bad: working dir should be whatever directory was invoked from rather than fixed to the Home folder
102 
103 docker () {
104   MSYS_NO_PATHCONV=1 docker.exe "$@"
105 }
106 export -f docker
107 
108 if [ $# -eq 0 ]; then
109   echo "Start interactive shell"
110   exec "$BASH" --login -i
111 else
112   echo "Start shell with command"
113   exec "$BASH" -c "$*"
114 fi
View Code


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM