在 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

我为appcms 设置了容器链接,以启动并自动连接到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:2376DOCKER_CERT_PATH=%USERPROFILE%\.docker\machine\certs。在windows系统属性中配置这些,它一直有效。

以上是关于在 Mac OS X 上从 boot2docker 迁移到 Vagrant+NFS 的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Install Docker on Mac OS X

如何在 mac os x 上从通过 USB 连接的多轨混音器获取输入

在 mac OS 上从 crontab 运行 git pull 命令问题

如何在 Mac OS Lion 上从命令行启动 MySQL 服务器?

在 Mac OS X 上使用 R 访问 MySQL 数据库

Mac OS X 上的 Qt 安装问题