在 Mac OS X 上从 boot2docker 迁移到 Vagrant+NFS 的最快方法是啥?
Posted
技术标签:
【中文标题】在 Mac OS X 上从 boot2docker 迁移到 Vagrant+NFS 的最快方法是啥?【英文标题】:What's the fastest way to migrate from boot2docker to Vagrant+NFS on Mac OS X?在 Mac OS X 上从 boot2docker 迁移到 Vagrant+NFS 的最快方法是什么? 【发布时间】:2015-02-09 23:21:51 【问题描述】:我有一个由官方mysqldocker pull mysql
构建的数据库容器。
我有一个用 Cake 构建的前端应用 app
。
我有一个使用 Symfony 构建的后端应用程序 cms
。
我为app
和cms
设置了容器链接,以启动并自动连接到db
。
一切都很好,但使用 boot2docker 非常慢。
我一直在尝试了解如何将 Vagrant 与 NFS 一起使用。
网上有一些不同的教程和示例,但到目前为止我一直无法开始。我已经安装了最新的 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
进入虚拟机,我可以运行docker images
等,但这不是我想要的;我习惯于直接从 Mac OS X 终端运行 docker 命令。很明显我误解了一些东西。此外,Vagrant 博客上的教程使用 rsync
和 --provider=docker
,这似乎也不需要使用 yungsang/boot2docker vagrant box。
如果能得到一些指导,我将不胜感激,我觉得我在这方面已经用尽了我的 Google 搜索功能。
参考:
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
【问题讨论】:
也有帮助:reddit.com/r/docker/comments/2osgl7/vagrant_vs_boot2docker 带有示例 Vagrant 文件 dumptext.com/vKgOkYFF 【参考方案1】:更新 [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 虚拟机。
【讨论】:
太棒了,效果很好......好吧,我可以运行 docker ps -a 但我一直用于db
的相同 docker run 命令失败:FATA[0000] 来自的错误响应守护进程:没有指定命令
感谢 Github 上的 Vagrantfile。你使用 config.vm.provision :docker do |d|在你的流浪文件中?我问是因为到目前为止我有一个空白的 Vagrantbox 运行 yungsang/boot2docker 映像,但我不能使用任何 docker run 命令来真正让容器和应用程序在其中运行。
$ vagrant up $ export DOCKER_HOST=tcp://localhost:2375 $ docker version 最后一个命令是否给你和错误或显示 docker 版本信息?如果它没有失败,那么你应该能够运行你的 docker 东西。
请注意,从默认设置的 Windows 上的 docker 1.91a 开始,我的环境变量是:DOCKER_HOST=tcp://192.168.99.100:2376
和 DOCKER_CERT_PATH=%USERPROFILE%\.docker\machine\certs
。在windows系统属性中配置这些,它一直有效。以上是关于在 Mac OS X 上从 boot2docker 迁移到 Vagrant+NFS 的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mac os x 上从通过 USB 连接的多轨混音器获取输入
在 mac OS 上从 crontab 运行 git pull 命令问题