这台 Mac El Capitan 上安装了官方 docker。运行 bash 文件时,命令之一是启动 docker 守护进程(如果它未运行):
[[ $(docker-machine status) == "Stopped" ]] && docker-machine start
eval $(docker-machine env)
我猜它没有运行,因为我得到了下面的输出,我希望上面的代码能够正常处理。要做到这一点需要做什么?
Starting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Machine "default" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.99.100:2376": tls: DialWithDialer timed out
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.
第二次运行脚本文件时,一切都很顺利。
答案1
OS X(或现在称为 macOS)上的 Docker 在 Linux 虚拟机内运行,通常使用 VirtualBox 作为虚拟机管理程序。因此,当您使用 启动 docker 时docker-machine start
,虚拟机及其上的所有服务需要一段时间才能启动并变得可用。因此,要解决此问题,您可以执行以下操作:
[[ $(docker-machine status) == "Stopped" ]] && docker-machine start
sleep 10
eval $(docker-machine env)
如果时间太多或不够,您可能希望调整传递的值sleep
,因为虚拟机变得可用所需的时间取决于 OS X 主机上的硬件以及虚拟机分配给 Docker guest 的硬件。