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 引擎)。
我在使用 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 引擎)。