首页 > 解决方案 > 可以用 Docker Machine 管理 MacOS Docker 桌面吗?

问题描述

我在我的 Mac 上安装了 Docker Desktop(不是 Docker Toolkit),并根据官方文档安装了 docker-machine

我正在尝试将我的 localhost Docker 引擎添加为 docker 机器下的 docker 节点,但没有成功。

我所做的步骤是:

  1. 在 localhost 中启用 sshd(ssh localhost有效)

  2. 将 localhost Docker 添加到 Docker 机器:

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

对不起我的英语,我不是本地人。

标签: dockerdocker-machinedocker-engine

解决方案


docker-machine很危险。我不建议将它用于管理生产服务器,因为它需要无密码 sudo,并且很容易损坏您的 Docker 安装。我设法从服务器上完全删除了所有容器和图像,没有意识到我运行的命令不仅仅是连接到服务器,而是从头开始初始化它。

如果您想从单个 CLI 控制多个 Docker 守护程序,请尝试Docker Contexts

编辑:

docker-machine的目的是使用 Docker 守护进程配置和管理机器。

它既可以与本地 VM 一起使用,也可以与各种云提供商一起使用。只需一条命令,它就可以创建和启动 VM,然后在该新 VM 上安装和配置 Docker(包括生成 TLS 证书)。

它可以创建一个完整的 Docker Swarm 集群。

它还可以在物理机器上安装 Docker,使用无密码 sudo 进行 SSH 访问(这是您尝试使用的通用驱动程序)。

一旦机器完全配备了 Docker,它还可以设置环境变量来配置 Docker CLI 以将命令发送到安装在该机器上的远程 Docker 守护程序 - 请参阅此处了解详细信息。

最后,还可以通过不使用任何驱动程序手动配置 Docker 添加机器 - 如此所述。这样做的唯一目的是在各种远程机器之间切换时允许统一的工作流程。

然而,正如我之前所说的那样docker-machine是危险的——它还可以删除现有的虚拟机,并且在物理机重新发布它们的情况下,从而删除所有现有的图像、容器等。一个简单的错误可以清除服务器。更不用说它需要基于密钥的 SSH 和无密码的 sudo,因此,如果未经授权的人获得了生产服务器的 SSH 密钥,那么就是这样 - 他们对所有内容都有完全的 root 访问权限。

可以docker-machine安全地与预先存在的 Docker 安装一起使用 - 您需要在不使用此处所述的任何驱动程序的情况下添加它们。然而,在这种情况下,大多数docker-machine命令都不起作用,因此唯一的好处是为我之前提到的 Docker CLI 轻松生成这些环境变量。

Docker 上下文是一种告诉 Docker CLI 它应该与哪个 Docker 守护进程通信的新方法。它们本质上是为了替换所有这些环境变量docker-machine生成的。

由于 Docker CLI 仅与 Docker 守护程序通信,因此不存在意外删除 VM 或重新配置已配置的物理机的风险。由于它们是 Docker CLI 的一部分,因此无需安装额外的软件。

另一方面,Docker contexts不能用于创建或配置新机器 - 需要手动完成或使用其他机制或工具(如 Vagrant 或云提供商提供的某种模板)。

因此,如果您真的需要一个可以让您轻松创建、配置和删除启用 docker 的机器的工具,请使用docker-machine. 但是,如果您只想在一个地方列出所有支持 Docker 的机器,并且可以轻松设置本地 Docker CLI 应该与哪个机器通信,那么这Docker Contexts是一种更安全的选择。


推荐阅读