我如何远程连接到 docker 容器 运行 Apache Drill

How do I connect to a docker container running Apache Drill remotely

机器A上,我运行

 $ docker run -i --name drill-1.14.0 -p 8047:8047 
   --detach -t drill/apache-drill:1.14.0 /bin/bash
   <displays container ID>

 $ docker exec -it drill-1.14.0 bash
   <connects to container>

 $ /opt/drill/bin/drill-localhost  

我的问题是,我如何从机器B 运行

docker exec -it drill-1.14.0 bash

机器 A - 我查看了帮助页面,但没有任何点击。

两台机器都是 Windows (10 x64) 台机器。

您需要通过 ssh 或其他方式从机器 B 安全连接到机器 A,然后 运行 那里的相关 Docker 命令。没有解决此问题的安全捷径。

请记住,能够 运行 任何 Docker 命令都意味着对系统具有根级访问权限(您可以 docker run -u root -v /:/host ... 并查看或更改您需要的任何主机系统文件想)。因此,通常可以控制谁可以 运行 Docker 命令。打开联网的 Docker 套接字 可能 ,但是 极其 危险:现在任何可以通过网络访问该套接字的人都可以,比如,更改主机的密码和 sudoers 文件以允许无密码的 root 等效 ssh 登录。 (例如,Google 新闻在一两周前给我带来了一篇关于攻击者寻找开放 Docker 网络套接字并使用它们将机器变成加密货币矿工的文章。)

如果您正在构建一项服务,并且您希望用户与它进行远程交互,那么您可能需要将任何接口作为网络请求提供,而不是通过 运行 本地 shell命令。例如,基于 HTTP 的服务通常有 /admin 组 URL 路径,这些路径需要单独的密码身份验证或其他不同的权限。

如果您尝试通过其本地配置文件管理服务,通常最好的方法是将配置文件存储在主机系统上,使用 docker run -v 将它们注入容器,然后您需要更改它们,docker stop; docker rm; docker run 容器以使用新的配置文件获取它的新副本。

如果您正在打包某些应用程序,但与其交互的主要方式是通过 CLI 工具和本地文件,请考虑您是否真的想使用一种工具来将应用程序的文件系统与主机的文件系统隔离开来,并且需要 root-级别访问权限以完全与之交互。在您选择的脚本语言中安装半隔离工具的工具已经非常成熟,并且对于编译语言也非常成熟;在您的主机系统上安装软件没有任何问题。