这篇文章需要接着《使用docker搭建laravel开发环境》一文中提到的问题的解答:

Windows下开启了Hyper-v后安卓模拟器及VMware均不能用了?

这个问题的前提是使用Docker for Windows时带来的,官方曾表态:

Docker Machine的驱动程序模型没有完全映射到Docker for Windows,因为Docker for Windows更加集成且紧密耦合(例如,我们有一个依赖于hyper-v的网络代理)。这是在灵活性与一致性以及紧密集成之间的一个令人不愉快的折中,这让我们试图解决Toolbox的VPN持久化和其他常见问题。

The driver model from Docker Machine doesn’t map cleanly to Docker for Windows because Docker for Windows is more integrated and tightly coupled (eg. we have a networking proxy that relies on hyper-v sockets). This is an unpleasant tradeoff between flexibility vs. consistency and tight integration that lets us try to tackle VPN durability and other common problems with Toolbox.

原文地址

大概意思是你洗洗睡,再好好想想到底用不用Docker for Windows。事实上我电脑还要打游戏的啊,用上Hyper-V不是逼我要好好学习好好工作吗?不过官方良心,还提供了一个方法临时解决这个问题:

关闭你的Hyper-V,然后重启完你的游戏去吧。

这令我每次都要在用上docker与玩游戏之间不断重启电脑。我也曾考虑用上老方法:虚拟机!但是考虑使用docker还要退回老方法能接受?这里尝试使用Docker for Windows较为旧的解决方案Docker Toolbox

安装 Docker Toolbox

喜欢阅读官方教程文档请移步。

进入上面官方教程当你按下 Get Docker Toolbox for Windows 按钮下载完后安装,这里就细说明安装的问题。

使用

安装完桌面出现以下图标,每次开机均需要运行一次Docker QuickStart Terminal就可以使用docker了。

运行 hello world测试一下,成功运行如下:

docker run busybox echo hello worldUnable to find image 'busybox:latest' locally
511136ea3c5a: Pull complete
df7546f9f060: Pull complete
ea13149945cb: Pull complete
4986bf8c1536: Pull complete
hello world

比较多的问题

能使用vmware代替virtualbox吗?

答案:能!

由于使用Docker Toolbox使用virtualbox承载底层OS层服务,virtualbox毕竟是虚拟机技术在这里属于可替换的部分,还记得这篇文章的出现的原因吗?正是因为使用了同是虚拟化技术Hyper-V引申出来的。所以答案是能!

怎样换?这需要说说docker-machine的具体功能。

Machine lets you create Docker hosts on your computer, on cloud providers, and inside your own data center. It creates servers, installs Docker on them, then configures the Docker client to talk to them.

大概意思是docker的服务基于machine上的,然后可以理解为容器都是运行在machine上。说完原理,接下来做一下实操。

安装vmware支持

下载docker-machine-driver-vmwareworkstation.exe,然后放到Docker Toolbox目录下:

# C:\Program Files\Docker Toolbox
ls -1boot2docker.iso
docker.exe*
docker-compose.exe*
docker-machine.exe*
docker-machine-driver-vmwareworkstation.exe*
docker-quickstart-terminal.ico
installers/
start.sh*
unins000.dat
unins000.exe*

并且把以下代码覆盖到目录下的start.sh文件里:

#!/bin/bashexport PATH="$PATH:/mnt/c/Program Files (x86)/VMware/VMware Workstation"trap '[ "$?" -eq 0 ] || read -p "Looks like something went wrong in step ´$STEP´... Press any key to continue..."' EXITVM=${DOCKER_MACHINE_NAME-default}
DOCKER_MACHINE=./docker-machine.exeBLUE='\033[1;34m'
GREEN='\033[0;32m'
NC='\033[0m'if [ ! -f "${DOCKER_MACHINE}" ]; thenecho "Docker Machine is not installed. Please re-run the Toolbox Installer and try again."exit 1
fivmrun.exe list | grep "${VM}" &> /dev/null
VM_EXISTS_CODE=$?set -eSTEP="Checking if machine $VM exists"
if [ $VM_EXISTS_CODE -eq 1 ]; then"${DOCKER_MACHINE}" rm -f "${VM}" &> /dev/null || :rm -rf ~/.docker/machine/machines/"${VM}"#set proxy variables if they existsif [ -n ${HTTP_PROXY+x} ]; thenPROXY_ENV="$PROXY_ENV --engine-env HTTP_PROXY=$HTTP_PROXY"fiif [ -n ${HTTPS_PROXY+x} ]; thenPROXY_ENV="$PROXY_ENV --engine-env HTTPS_PROXY=$HTTPS_PROXY"fiif [ -n ${NO_PROXY+x} ]; thenPROXY_ENV="$PROXY_ENV --engine-env NO_PROXY=$NO_PROXY"fi  "${DOCKER_MACHINE}" create -d vmwareworkstation $PROXY_ENV "${VM}"
fiSTEP="Checking status on $VM"
VM_STATUS="$(${DOCKER_MACHINE} status ${VM} 2>&1)"
if [ "${VM_STATUS}" != "Running" ]; then"${DOCKER_MACHINE}" start "${VM}"yes | "${DOCKER_MACHINE}" regenerate-certs "${VM}"
fiSTEP="Setting env"
eval "$(${DOCKER_MACHINE} env --shell=bash ${VM})"STEP="Finalize"
clear
cat << EOF##         .## ## ##        ==## ## ## ## ##    ===/"""""""""""""""""\___/ ===~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~\______ o           __/\    \         __/\____\_______/EOF
echo -e "${BLUE}docker${NC} is configured to use the ${GREEN}${VM}${NC} machine with IP ${GREEN}$(${DOCKER_MACHINE} ip ${VM})${NC}"
echo "For help getting started, check out the docs at https://docs.docker.com"
echo
cddocker () {MSYS_NO_PATHCONV=1 docker.exe "$@"
}
export -f dockerif [ $# -eq 0 ]; thenecho "Start interactive shell"exec "$BASH" --login -i
elseecho "Start shell with command"exec "$BASH" -c "$*"
fi

然后再次运行Docker Quickstart Terminal

docker-machine lsNAME      ACTIVE   DRIVER              STATE     URL                          SWARM   DOCKER        ERRORS
default   *        vmwareworkstation   Running   tcp://192.168.163.130:2376           v18.02.0-ce

能看到DRIVER已替换为vmwareworkstation,然后就可以安心使用了。

一个需要注意的地方:使用vmware支持的不能使用Kitematic,打开将会重置你的整个服务然后将会还原为virtualbox

在任何地方使用docker

在使用上还存在些问题,像我在实际工作中需要在VSCode控制docker。目前这个方案会导致必须在Docker Quickstart Terminal的命令窗口下才能使用,这样严重影响使用体验。

如果你其他地方使用docker命令会得到以下反馈:

docker pserror during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.35/containers/json: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.

经过多番查找得出解决办法:

在当前命令行注入DOCKER相关变量,让docker命令获得配置内容均可使用

步骤如下:

  1. 开机运行Docker Quickstart Terminal
  2. 打开命令行窗口然后运行以下代码:

    eval "$(docker-machine env default)"
  3. 就可以使用了

    docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

如果还不行在当前命令行窗口输入以下代码,看是否为当前可用:

docker-machine env defaultexport DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.163.130:2376"
export DOCKER_CERT_PATH="C:\Users\infzm-pc\.docker\machine\machines\default"
export DOCKER_MACHINE_NAME="default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("C:\Program Files\Docker Toolbox\docker-machine.exe" env default)

如不可用请根据具体情况修改--shell参数,可选:bash, fish, cmd, powershell, tcsh

# 在git shell中
eval "$(docker-machine env --shell bash default)"# 在cmd中
eval "$(docker-machine env --shell cmd default)"

出现一些异常

如你在初次使用或者pull镜像时出现以下错误,建议你pull镜像或者build之类的较为繁琐的内容还是于Docker Quickstart Terminal命令行窗口下运行。

Traceback (most recent call last):File "docker-compose", line 6, in <module>File "compose\cli\main.py", line 71, in mainFile "compose\cli\main.py", line 124, in perform_commandFile "compose\cli\main.py", line 959, in upFile "compose\project.py", line 452, in upFile "compose\service.py", line 324, in ensure_image_existsFile "compose\service.py", line 972, in buildFile "compose\progress_stream.py", line 23, in stream_outputFile "compose\progress_stream.py", line 90, in print_output_eventFile "codecs.py", line 370, in writeFile "site-packages\colorama\ansitowin32.py", line 40, in writeFile "site-packages\colorama\ansitowin32.py", line 141, in writeFile "site-packages\colorama\ansitowin32.py", line 169, in write_and_convertFile "site-packages\colorama\ansitowin32.py", line 174, in write_plain_text
IOError: [Errno 0] Error
Failed to execute script docker-compose

备注

在替换成vmware虚拟服务时start.sh插件提供的源代码会存在找不到machine的问题导致每次重启(宿主机)均从新安装一遍VM,导致本地镜像与容器全没了。目前贴的这份代码是已修复的,具体看pecigonzalo/docker-machine-vmwareworkstation/issues/31

关于在window下使用docker的备选方案相关推荐

  1. 在window下修改docker配置文件daemon.json

    win10以下用户右击client查找文件所在目录,然后检索daemon.json进行修改 win10用户上述方法也适用,更详细的配置可以参考 微软官方描述 建议收藏 ** 如果您是要修改私库地址白名 ...

  2. weblogic 64位 linux,weblogic在linux和window下的安装

    weblogic在linux和window下的安装 Windows server2008 一直下一步没什么坑 centos6.5 使用rpm安装jdk8 安装jdl rpm -ivh jdk-8u19 ...

  3. window7下安装Docker方法

    window7下安装Docker方法 参考链接: 1.http://www.yurongbj.com/m/article_2016 2.https://www.runoob.com/docker/wi ...

  4. [Kafka错误]-----kafka在window下出现另一个程序正在使用此文件,进程无法访问的错误

    目录 前言------对于只想解决这个问题的程序猿们,可以直接跳到"解决" 1.背景 2.问题 3.原因 4.解决(尾部有提供编译好的kafka包下载链接) 4.1kafka补丁版 ...

  5. Centos7下安装Docker

    Centos7下安装Docker(详细的新手装逼教程) 参考: https://www.cnblogs.com/qgc1995/archive/2018/08/29/9553572.html 早就听说 ...

  6. Deepin 下安装 Docker

    2019独角兽企业重金招聘Python工程师标准>>> Docker官网上并没有提供关于 Deepin 的 Docker 安装教程,由于 Deepin 是基于 Debian 的,所以 ...

  7. window下实现在线预览功能

    window下实现在线预览功能 最近用到文档在线预览功能,之前没接触过,一切从零开始,整了一段时间终于实现,现在把方法分享给大家! 一.主要思路 先将其他格式的文档(office文档.txt.图片等等 ...

  8. 在window下使用gemsim.models.word2vec.LineSentence加载语料库文件的格式要求

    在window下使用gemsim.models.word2vec.LineSentence加载语料库文件的格式要求 class LineSentence(object):""&qu ...

  9. 如何在Linux下安装Docker

    如何在Linux下安装Docker Docker概念: Docker包括三个基本概念: l  镜像(Image) l  容器(Container) l  仓库(Repository) 理解了这三个概念 ...

  10. window下使用nw.js开发桌面应用程序环境的搭建

    安装node window下去node官网下载长期支持版本或者最新稳定版都可以. 按装nw用来管理和按装nw.js npm install -g nrm # 用来设置npm镜像地址 npm insta ...

最新文章

  1. 普通粒子群算法和优化方法
  2. 2020年,你读到印象最深的论文是哪篇?
  3. C#异步编程模式IAsyncResult概述
  4. VTK:颜色顶点查找表用法实战
  5. 小米空调来了,意外的是还一起来了一个马桶盖
  6. 前端学习(1992)vue之电商管理系统电商系统之实现搜索和清空
  7. ROS有三个层级的概念,分别是:文件系统级、计算图级和开源社区级
  8. 详述一则DB2 Error Code 1639和SQL State 08001案例诊断和解决方案
  9. 吴恩达机器学习(一)单变量线性回归(假设函数、代价函数、梯度下降)
  10. 《软件需求》学习笔记
  11. ViewPager异常,对ViewPager源码分析
  12. pyqt5 点击开始执行_PyQt5教程——第一个程序(2)
  13. 《软件方法》第8章 分析 之 分析类图——知识篇Part1(20211029更新)
  14. wincc新手之路-安装与授权
  15. 编写REG注册表文件
  16. GIF制作软件哪个好,怎么制作搞笑GIF
  17. 分析网站如何检测已经登录的QQ帐号
  18. 镜像电流源特点_镜像电流源原理及其应用电路
  19. SpringCloud Config连接私有仓库时的配置(记录一下)
  20. ME3616 NBIOT模组对接OneNET教程以及STM32代码

热门文章

  1. atitit 完整的知识体系表 学科体系表 v2
  2. Atitit 财政学概论 attilax学习笔记
  3. atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产品线(旅游
  4. Atitit.c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结
  5. paip.数组以及集合的操作uapi java php python总结..
  6. paip.NullPointerException --ApplicationImpl. createValueBinding错误的解决
  7. Rust : rand库与不同分布下的随机数产生
  8. 海外资管业价格战有多疯狂?史上首个零费率基金横空出世
  9. (转)从Fintech到Techfin,未来十年有九大重要挑战
  10. 一文看完“阿里云自动化运维沙龙 · 上海专场”整场干货