是否有更好的方法在Docker swarm上运行命令或shell

时间:2017-10-27 12:52:22

标签: docker

假设我想编辑一个跨3个节点复制的NGINX Docker服务的配置文件。

目前,我使用docker service ls列出服务。

然后使用docker serivce ps servicename获取详细信息以查找运行该服务容器的节点。

然后ssh到其中一个容器正在运行的节点。

最后,docker exec -it containername bash。然后我编辑配置文件。

两个问题:

  1. 有没有更好的方法来执行此操作而不是ssh到运行容器的节点?也许有一个swarm或service命令可以这样做?
  2. 如果我要在一个容器上编辑该配置文件,那么该更改是否会被复制到该群中的其他2个容器中?
  3. 本练习的目的是在不关闭服务的情况下编辑配置。

1 个答案:

答案 0 :(得分:0)

您不应该执行容器来更改其配置,因此docker还没有创建一种在Swarm模式下执行此操作的简单方法。您可以使用经典swarm来避免需要ssh到其他主机,但我仍然不建议这样做。

执行此操作的正确方法是将配置文件迁移到docker config条目。版本化您的配置名称。然后,当您想要更新它时,可以创建具有所需更改的新版本,并对服务进行滚动更新以使用该新配置。

除非从NFS等外部源安装配置,否则对一个容器中的一个配置的更改将不适用于在其他节点上运行的其他容器。如果该配置作为其内部写时复制文件系统的一部分存储在容器内部,那么任何其他容器中都不会显示来自一个容器的更改。