我对使用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我通过运行eval "$(docker-machine env default)"修复了这个错误,之后docker-compose -f dev.yml build成功完成。
我的问题是为什么这样做,实际发生了什么,以及我如何撤销它?
另外,这是一种安全的修复方法吗?现在这只是我的笔记本电脑,但这些容器应该会在不久的将来访问公司的服务器。
我对bash不是很熟悉,但我总是被告知不要运行eval,尤其是不要运行eval。
发布于 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机器的细节。输出如下所示:
$ 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引擎)。
发布于 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.
如果您自己运行docker-machine env default,您将看到它只是建议设置一些环境变量,这些变量允许Docker命令找到运行Docker守护进程的虚拟机。如果不设置这些变量,Docker根本不知道如何与Docker守护进程通信。
在服务器环境( Linux )中,您不需要Docker Machine,因为Linux内核本身就支持运行容器。您只需要在本地不支持运行容器的操作系统上使用Docker Machine (一个运行Linux内核的小型VM )。
https://stackoverflow.com/questions/40038572
复制相似问题