【问题标题】:Docker - running commands from all containersDocker - 从所有容器运行命令
【发布时间】:2016-05-02 12:30:19
【问题描述】:

我正在使用 docker compose 为我的网站创建基本环境(目前仅在本地,所以我不关心安全问题)。目前我正在使用 3 个不同的容器”

  • 对于 nginx
  • 为 php
  • 对于mysql

我显然可以登录到任何容器来运行命令。例如,我可以 ssh 到 php 容器以验证 PHP 版本或运行 PHP 脚本,但问题是 - 是否有可能进行这样的配置,以便我可以从运行的所有容器(例如一个 SSH 容器)运行命令?

例如我想运行这样的命令:

php -v
nginx restart
mysql 

在为所有服务登录到一个通用 SSH 之后。

有可能吗?我知道有exec 命令,所以我可以在容器的每个命令名称之前添加,但它的使用不够灵活,如果容器更多,它会越来越困难。

所以问题是 - 有没有可能,如果有,如何实现?

【问题讨论】:

  • 一般来说你不需要在你的容器中运行sshddocker exec 是一个更好的主意,因为它不需要在每个容器内运行 Yet Another Service。
  • @larsks 理论上是正确的,但是例如调试呢?我需要 SSH 在我的 IDE 中毫无问题地进行调试。我刚刚使用 SSH 设置了另一个容器,我可以 ssh 进入它,但我不知道是否有可能以某种方式从所有其他容器运行命令。另外,如果我为 gulp 运行另一个容器怎么办?要运行 gulp,我需要在一个容器中运行 docker exec,对于 php,我需要在另一个容器中运行 docker exec
  • 为什么需要 SSH 才能在 IDE 中进行调试?你能更详细地描述你的用例吗?要回答您问题的第一部分,您可以使用 Makefile 自动执行常见任务。

标签: docker docker-compose


【解决方案1】:

你的问题是:

有可能吗?

答案是:

这是由于您同时给出的两个限制。您的第一个限制是:

  1. 使用 SSH 而不是 Exec

绝对可以在每个容器中运行一个 SSH 守护程序并设置安全性,以便您可以在例如运行 ssh 命令。无密码模式

参见例如Passwordless SSH login

您的第二个限制是:

  1. 一个通用的 SSH 用于所有服务

现在这将是棘手的部分。你必须:

  • 创建一个通用的 ssh 服务器,例如一个为此目的的特殊容器或使用其中一个容器
  • 创建容器之间或容器之间的通信
  • 确保 ssh 服务器知道哪个命令适用于哪个容器

总而言之,与可以使用 exec 命令执行相同操作的简单 bash 或 python 脚本相比,这一切都非常复杂,恕我直言,与试图解决“可能”的学术问题相比,“否”是一个更好的答案这样做有一些棘手/花哨的解决方案”。

【讨论】:

  • 感谢您的解释。目前我决定将 SSH 添加到 PHP 容器中,对于更复杂的配置,我可能会考虑是否将它们添加到 PHP 容器中或创建单独的容器。
猜你喜欢
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
相关资源
最近更新 更多