0

主要问题是我有两个容器:containerA 和 containerB。containerB 是 Portia 的容器,它正在运行,由于外部原因我无法停止。在容器A中,我需要执行容器B的docker exec。

我已经阅读了两个主要的解决方案,我已经尝试过的第一个解决方案是使用 ssh 在主机中运行脚本,但我不能拥有没有密码的用户,并且在我看来,给密码似乎不是最好的方法去做这个。第二种方式是使用 docker.sock 和一个 docker compose 文件,但是很多人在评论中说这不是一种安全的方式。

有人可以用其他方式解释我吗,或者如果我错了,为什么?谢谢你的时间。

4

2 回答 2

0

正如您在问题中提到的,您可以找到两种可能的方式来远程运行 docker 命令。

  • 使用 ssh
  • 使用 docker 套接字

您认为这两者都不安全。

但事实并非如此。我不确定 ssh,但可以保护 docker 套接字。

看看这个

您必须tls在您的 docker daemon socket 上启用,以使其安全。然后你可以以安全的方式远程运行 docker。

引用上述链接的第一段。

默认情况下,Docker 通过非联网的 UNIX 套接字运行。它还可以选择使用 HTTP 套接字进行通信。

如果您需要通过网络以安全的方式访问 Docker,您可以通过指定 tlsverify 标志并将 Docker 的 tlscacert 标志指向受信任的 CA 证书来启用 TLS。

在守护程序模式下,它只允许来自由该 CA 签名的证书进行身份验证的客户端的连接。在客户端模式下,它只连接到具有该 CA 签署的证书的服务器。

希望这可以帮助。

于 2019-06-25T04:19:03.370 回答
0

您基本上已经强调了在另一个容器中直接运行命令的仅有的两种方法。特别是,允许docker exec​​访问可以让您的进程对主机进行无限的根级别控制,并且您设置中的任何安全问题都可能会打开危害主机的非常真实的可能性(我已经看到了许多 SO 问题,其中包括对system("docker exec $COMMAND")类型调用的微不足道的 shell 注入攻击) .

最佳做法是尽量避免docker exec。这是一个非常有用的调试工具,但它根本不应该出现在您的核心应用程序流程中。(这非常相当于“ssh 作为服务器的 root 并且...”,这绝不是最佳实践。)。如果一个容器需要请求另一个容器做某事,这通常是通过某种 HTTP 接口完成的。

于 2019-06-24T13:46:20.793 回答