首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >eval "$(docker-machine env default)“

eval "$(docker-machine env default)“
EN

Stack Overflow用户
提问于 2016-10-14 16:32:30
回答 2查看 24.2K关注 0票数 14

我对使用docker-compose启动docker有问题。

当我运行docker-compose -f dev.yml build时,出现以下错误>

代码语言:javascript
复制
Building postgres
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.

但是,如果我运行docker-machine ls,机器显然是启动的>

代码语言:javascript
复制
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.1

我通过运行eval "$(docker-machine env default)"修复了这个错误,之后docker-compose -f dev.yml build成功完成。

我的问题是为什么这样做,实际发生了什么,以及我如何撤销它?

另外,这是一种安全的修复方法吗?现在这只是我的笔记本电脑,但这些容器应该会在不久的将来访问公司的服务器。

我对bash不是很熟悉,但我总是被告知不要运行eval,尤其是不要运行eval。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-14 17:46:55

当您运行docker命令时,命令行界面会连接到Docker守护进程的应用程序接口,而实际执行这项工作的是该应用程序接口。您可以从本地CLI通过更改API连接详细信息来管理远程Docker主机,这些API连接详细信息存储在运行CLI的客户端上的环境变量中。

通过Docker Machine,您的Docker引擎在VM中运行,这实际上是一台远程计算机,因此您的本地CLI需要配置为连接到它。Docker machine知道它所管理的引擎的连接细节,因此运行docker-machine env default会打印出Docker机器的细节。输出如下所示:

代码语言:javascript
复制
 $ docker-machine env default
 export DOCKER_TLS_VERIFY="1"
 export DOCKER_HOST="tcp://172.16.62.130:2376"
 export DOCKER_CERT_PATH="/Users/elton/.docker/machine/machines/default"
 export DOCKER_MACHINE_NAME="default"

使用eval执行每个export命令,而不仅仅是将它们写入控制台,因此这是设置环境变量的一种快速方法。

您可以使用Docker撤销它并重置本地环境,这将为您提供取消设置环境的输出(这样docker-machine env --unset将尝试连接到本地Docker引擎)。

票数 36
EN

Stack Overflow用户

发布于 2016-10-14 17:45:40

这确实是在不支持Docker的机器上使用Docker的预期方式,例如在Windows或Mac OS X上。

Docker文档在其使用Docker Machine的说明中包含了这一步:https://docs.docker.com/machine/get-started/

这一步的作用(我建议你自己也尝试一下):

docker-machine env default.

  • Take
  • 运行该命令的输出,并在当前shell会话中执行它。

如果您自己运行docker-machine env default,您将看到它只是建议设置一些环境变量,这些变量允许Docker命令找到运行Docker守护进程的虚拟机。如果不设置这些变量,Docker根本不知道如何与Docker守护进程通信。

在服务器环境( Linux )中,您不需要Docker Machine,因为Linux内核本身就支持运行容器。您只需要在本地不支持运行容器的操作系统上使用Docker Machine (一个运行Linux内核的小型VM )。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40038572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档