如何在Mac OS X上最快地从boot2docker迁移到Vagrant+NFS?

6
我有一个由官方mysql docker pull mysql构建的数据库容器。
我使用Cake构建了前端应用程序app
我使用Symfony构建了后端应用程序cms
我为appcms设置了容器链接,以便启动并自动连接到db
一切都很好,但是在boot2docker上非常慢。
我一直在尝试理解如何使用NFS的Vagrant。
有一些不同的在线教程和示例,但到目前为止,我一直无法开始。我已安装最新的Vagrant,并使用了示例yungsang/boot2docker,但是当我尝试最简单的命令docker images时,我一直收到错误,例如FATA [0000] An error occurred trying to connect: Get https://localhost:2375/v1.16/images/json: tls: oversized record received with length 20527。 我发现如果我vagrant ssh进入VM,我可以运行docker images等命令,但这不是我想要的;我习惯于直接从Mac OS X终端运行docker命令。因此,显然我误解了某些东西。此外,Vagrant博客上的教程使用rsync--provider=docker,这似乎也不需要使用yungsang/boot2docker vagrant box。
我将感激您的指导,并感觉自己在这方面已经用尽了谷歌搜索的能力。
参考资料: https://www.vagrantup.com/blog/feature-preview-vagrant-1-6-docker-dev-environments.html https://github.com/boot2docker/boot2docker/issues/64 https://vagrantcloud.com/yungsang/boxes/boot2docker

还有一个有用的链接:http://www.reddit.com/r/docker/comments/2osgl7/vagrant_vs_boot2docker/,其中包含一个示例Vagrant文件http://dumptext.com/vKgOkYFF。 - phpguru
1个回答

17

更新 [2015-02-11]

为了回答更广泛的问题(标题中的问题),我已经在Github上创建了一个带有Vagrantfile的仓库,让你可以快速、轻松地开始使用MacOS上的Vagrant+Docker+NFS。

https://github.com/blinkreaction/boot2docker-vagrant


“tls: oversized record received”问题的原始解答 [2015-02-10]

问题描述

检查你的环境变量。你很可能混合使用了boot2docker shellinit和你自定义的DOCKER_HOST变量。例如:

$ env|grep DOCKER

DOCKER_HOST=tcp://localhost:2375
DOCKER_CERT_PATH=/Users/<user>/.boot2docker/certs/boot2docker-vm
DOCKER_TLS_VERIFY=1

你来到这里的原因是因为首先$(boot2docker shellinit) 导出了类似以下的内容,将docker客户端指向boot2docker虚拟机:
DOCKER_HOST=tcp://192.168.59.103:2376
DOCKER_CERT_PATH=/Users/<user>/.boot2docker/certs/boot2docker-vm
DOCKER_TLS_VERIFY=1

接着,您将Docker客户端指向了映射端口为的自定义VM

export DOCKER_HOST=tcp://localhost:2375

如何修复

短期解决方案

unset DOCKER_TLS_VERIFY

长期解决方案

要么移除你的 .bashrc.zshrc 等文件中的 $(boot2docker shellinit) 并在需要时手动执行它,要么将其放在以下顺序中:

# Docker (default for Vagrant based boxes)
export DOCKER_HOST=tcp://localhost:2375

# boot2docker shellinit
$(boot2docker shellinit)

如果boot2docker未运行,则DOCKER_HOST将默认为tcp://localhost:2375
否则,$(boot2docker shellinit)将覆盖变量并将DOCKER_HOST设置为指向boot2docker VM。


太棒了,成功了...好的,我可以运行docker ps -a,但是我一直用于“db”的相同docker run命令失败了:FATA [0000]守护程序的错误响应:未指定命令。 - phpguru
感谢在Github上分享Vagrantfile。你的Vagrantfile中是否使用了config.vm.provision:docker do |d|?我问这个是因为到目前为止,我只能运行yungsang/boot2docker镜像,但无法使用任何docker run命令在其中运行容器和应用程序。 - phpguru
$ vagrant up
$ export DOCKER_HOST=tcp://localhost:2375
$ docker version 如果最后一个命令没有报错并显示了docker版本信息,那么你应该能够运行你的docker程序。
- Leonid Makarov
请注意,使用默认设置的 Windows 上的 Docker 1.91a 中,我的环境变量为:DOCKER_HOST=tcp://192.168.99.100:2376DOCKER_CERT_PATH=%USERPROFILE%\.docker\machine\certs。在 Windows 系统属性中配置这些变量,它将始终正常工作。 - Alex C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接