eval "$(docker-machine env default)"

eval "$(docker-machine env default)"

我在使用 docker-compose 启动 docker 时遇到问题。

当我运行docker-compose -f dev.yml build我跟随错误>

Building postgres
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`.

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

NAME      ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER    ERRORS
default   -        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.1

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

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

这也是解决此问题的安全方法吗?现在这只是我的笔记本电脑,但这些容器应该会在不久的将来进入公司服务器。

我对 bash 不是很流利,但我总是被告知不要 运行 eval,尤其是不要 运行 eval 与“

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

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

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

  • 运行 docker-machine env default.
  • 获取该命令的输出并在当前 shell 会话中执行它。

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

在服务器环境 (Linux) 中,您将不需要 Docker Machine,因为 Linux 内核本身支持 运行ning 容器.在本机不支持 运行 容器的操作系统上,您只需要 Docker Machine(一个小型​​ VM 运行 宁一个 Linux 内核)。 =13=]

当您 运行 docker 命令时,CLI 连接到 Docker 守护程序的 API,而真正执行工作的是 API。您可以通过更改 API 连接详细信息从本地 CLI 管理远程 Docker 主机,这些连接详细信息 Docker 存储在 CLI 运行 所在客户端的环境变量中。

使用 Docker 机器,您的 Docker 引擎在 VM 中 运行ning,这实际上是一台远程机器,因此需要配置本地 CLI 以连接到它. Docker 机器知道它管理的引擎的连接详细信息,因此 运行ning docker-machine env default 打印出 default 机器的详细信息。输出是这样的:

 $ 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-machine env --unset 重置本地环境,这会为您提供取消设置环境的输出(因此 CLI 将尝试连接到本地 Docker 引擎)。