Kim*_*kka 12 bash docker docker-compose docker-machine
我有使用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`.
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行docker-machine ls机器显然是>
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default - virtualbox Running tcp://192.168.99.100:2376 v1.12.1
Run Code Online (Sandbox Code Playgroud)
我通过运行修复了错误,eval "$(docker-machine env default)"之后docker-compose -f dev.yml build成功完成.
我的问题为什么这个工作,实际发生了什么以及如何撤消它?
这也是一种安全的解决方法吗?现在这只是我的笔记本电脑,但这些容器应该在不久的将来打到公司的服务器.
我对bash并不是非常流利,但我总是被告知不要跑eval,特别是不要用"
Elt*_*man 31
当您运行docker命令时,CLI将连接到Docker守护程序的API,它是实际完成工作的API.您可以通过更改API连接详细信息来管理本地CLI中的远程Docker主机,Docker存储在运行CLI的客户端上的环境变量中.
使用Docker Machine,您的Docker引擎在VM中运行,VM实际上是远程计算机,因此需要将本地CLI配置为连接到它.Docker Machine知道它管理的引擎的连接细节,因此运行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"
Run Code Online (Sandbox Code Playgroud)
使用eval执行这些export命令,而不是仅将它们写入控制台,因此这是设置环境变量的快捷方法.
您可以撤消它并重置本地环境docker-machine env --unset,这将为您提供取消设置环境的输出(因此CLI将尝试连接到本地Docker引擎).
实际上,这是在本身不支持Docker的机器(例如Windows或Mac OS X)上使用Docker的预期方式。
Docker文档在其有关在此处使用Docker Machine的描述中包括此步骤:https : //docs.docker.com/machine/get-started/
此步骤的作用(我建议您也自己尝试一下):
docker-machine env default。如果您docker-machine env default自己运行,将会看到它只是建议设置一些环境变量,这些变量允许Docker命令找到运行Docker守护程序的VM。没有设置这些变量,Docker根本不知道如何与Docker守护程序通信。
在服务器环境(Linux)中,您将不需要Docker Machine,因为Linux内核本身支持正在运行的容器。您只需要在本机不支持运行容器的操作系统上使用Docker Machine(运行Linux内核的小型VM)。
| 归档时间: |
|
| 查看次数: |
13056 次 |
| 最近记录: |