问题描述
我在Mac上安装了Docker Desktop(不是Docker Toolkit),并且根据official documentation
安装了docker-machine。我试图像在docker机器下的docker节点一样添加本地Docker引擎,但没有成功。
我所做的步骤是:
-
在localhost中启用sshd(
ssh localhost
有效) -
将localhost Docker添加到Docker Machine:
docker-machine create --driver generic --generic-ip-address 127.0.0.1 --generic-ssh-user <"ssh_username"> <node_name>
Running pre-create checks...
Creating machine...
(localhost) No SSH key specified. Assuming an existing key at the default location.
Waiting for machine to be running,this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Password:
Detecting the provisioner...
Password:
Error creating machine: Error detecting OS: Error getting SSH command: ssh command error:
command : cat /etc/os-release
err : exit status 1
output : cat: /etc/os-release: No such file or directory
docker-machine ls
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
localhost - generic Running tcp://127.0.0.1:2376 Unknown Unable to query docker version: Cannot connect to the docker engine endpoint
对不起,我不是英语。
解决方法
docker-machine
很危险。我不建议使用它来管理生产服务器,因为它需要无密码的sudo,并且很容易损坏Docker安装。我设法从服务器上完全删除了所有容器中的图像,没有意识到我运行的命令不仅仅是连接到服务器,而是从头开始对其进行初始化。
如果要通过单个CLI控制多个Docker守护程序,请尝试Docker Contexts。
编辑:
docker-machine的目的是使用Docker守护程序配置和管理计算机。
它可以与本地VM以及各种云提供商一起使用。它可以使用一个命令创建和启动VM,然后在该新VM上安装和配置Docker(包括生成TLS证书)。
它可以创建整个Docker Swarm集群。
还可以通过无密码sudo(这是您尝试使用的通用驱动程序)的SSH访问,将Docker安装在物理计算机上。
一台机器完全配置了Docker后,它还可以设置环境变量来配置Docker CLI,以将命令发送到该机器上安装的远程Docker守护程序-有关详细信息,请参见here。
最后,还可以添加不使用任何驱动程序手动配置了Docker的计算机-如here所述。这样做的唯一目的是允许在各种远程计算机之间切换时实现统一的工作流程。
但是,正如我之前在docker-machine
中所说的那样,这很危险-它也可以删除现有的VM,并在物理机器对其进行重新配置的情况下删除所有现有的映像,容器等。一个简单的错误就可以清除服务器上的内容。更不用说它同时需要基于密钥的SSH和无密码的sudo,因此,如果未经授权的人可以使用生产服务器的SSH密钥,那么就可以了-他们具有对所有内容的完全root访问权限。
可以将docker-machine
安全地用于预先存在的Docker安装-您需要添加它们而无需使用here中所述的任何驱动程序。但是,在这种情况下,大多数docker-machine
命令将不起作用,因此唯一的好处就是可以轻松生成我前面提到的Docker CLI的那些环境变量。
Docker Contexts是告诉Docker CLI它应该与哪个Docker守护程序通信的新方法。它们本质上是用来替换docker-machine
生成的所有那些环境变量。
由于Docker CLI仅与Docker守护程序通信,因此不存在意外删除VM或重新配置已配置的物理机的风险。而且由于它们是Docker CLI的一部分,因此无需安装其他软件。
另一方面,Docker contexts
不能用于创建或配置新机器-需要手动执行操作或使用其他机制或工具(例如Vagrant或云提供商提供的某种模板) )。
因此,如果您真的需要一个可以轻松创建,配置和删除启用了docker的计算机的工具,请使用docker-machine
。但是,如果您只想在一个地方列出所有支持Docker的计算机,并轻松设置本地Docker CLI应该与之对话的方式,那么Docker Contexts
会更加安全。替代。