问题标签 [docker-swarm-mode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
286 浏览

docker - 客户端访问 docker swarm

我有一个由一个管理器和一个工作节点组成的 docker swarm 集群。然后我从我的笔记本电脑配置(tlsDOCKER_HOST)一个客户端来访问这个集群。

当我运行时,docker ps我只看到来自工作节点的容器(而不是工作节点的所有容器(!))。例如,来自我的客户:

以及我docker ps在工作节点上运行:

所以有两个问题:为什么docker ps不显示来自管理器机器的容器而不是来自工作节点的所有容器?

0 投票
1 回答
620 浏览

docker - Docker Swarm - 管理器无法访问,但状态仍然就绪

我有以下情况:

3 个节点(2 个经理和 1 个工人)

一切都很好,我让它们可视化。如果我杀死工人,几秒钟后状态会显示正确,这是正确的。如果我是其中一位经理,经理状态显示无法访问,这是正确的。但是状态仍然显示就绪。

知道问题可能是什么吗?

0 投票
0 回答
989 浏览

nginx - 使用 nginx 反向代理到 Docker 服务

我有一个运行 Docker 版本 1.13.1 的 Docker 群。我定期将 Docker 服务堆栈(通过docker stack deploy)部署到这个 swarm,我有一个 nginx 代理服务,它位于端口 80 和 443,作为 swarm 中各种应用程序的反向代理。

我在使用 nginx 的upstream功能时遇到了一个问题,它缓存了我的服务名称的 DNS 查找。这在一段时间内运行良好,但随着更多堆栈被删除和部署,这些缓存的 IP 地址变得陈旧,nginx 将开始超时或向错误的容器提供请求。

我尝试使用以下技术解决此问题:

127.0.0.11 似乎是 swarm 设置的内部 DNS 服务器的 IP 地址。这似乎在大多数情况下都有效 - 上游服务的 IP 地址不会被缓存很长时间,并且如果上游服务移动,代理就会恢复。但是,代理偶尔仍会为不正确地址的请求提供服务,例如,它会为请求提供服务http://10.0.0.12:80/...并超时或命中错误的容器。当我运行时docker exec proxycontainer ping stack_myapp,我得到了正确的 IP 地址。为什么 nginx 什么时候不能解析正确的 IP ping

0 投票
2 回答
2579 浏览

docker - Docker Swarm 共享卷

目前我正在构建一个 Docker Swarm 集群。它由3名经理和3名工人组成。我将在此设置上部署的应用程序包含一个 laravel 后端,该后端需要其代码在多个容器中以实现可扩展性。我已经尝试过使用 Ceph 后端的 GlusterFS 卷和 rex-ray 作为我的卷的共享存储。GlusterFS 不可靠,Ceph 在我的情况下有点矫枉过正而且太难了:)

当前设置看起来像这样。我在 docker 之外有一个 Percona 集群,我在这些服务器上运行 GlusterFS 并将它们简单地挂载到 Docker Worker 中。

然后我将它们安装到 php 容器中,如下所示:

这行得通,但这很慢。页面加载时间约为 10 秒,当文件未挂载(它们存在于容器中)时,页面加载时间约为 2-3 秒。

我来到了 Flocker,这看起来很有趣,但我认为植绒卷只能安装在一个容器上。这是真的?

我现在正在尝试的另一个解决方案是,每次创建新容器时都会从 git 中提取代码。这实际上是一个很好的解决方案,但提取代码并运行 composer 大约需要 5 分钟,当我推送更新时,我需要重新启动所有容器。

在多个主机上的不同容器之间共享我的代码的最佳解决方案是什么?(甚至是数据中心)目前我可以访问许多不同的存储后端(Ceph、NFS、gluster)并且创建一个新的后端没有问题。

编辑:为什么在这种情况下 gluster 不可靠?我可能在上面说错了......在 Gluster 上使用 docker 卷时,Gluster 不可靠,带有卷驱动程序插件。在创建服务时,卷在大多数情况下都能很好地挂载,但如果集群中发生重新调度,卷很少会再次挂载。我稍后会对此进行调查以确定出了什么问题,但我目前没有太多空闲时间。Gluster 实际上是固体。只是在这种情况下不是。

0 投票
0 回答
1177 浏览

docker - 可以将 docker-swarm 配置为根据负载自动缩放容器吗

在 docker-swarm 模式设置中,假设我有一个容器接受来自其他容器或来自 swarm 外部组件的请求。

是否有一种机制可以配置 swarm 以根据需要自动扩展运行特定任务的容器数量并在负载减少的情况下停止它们?

假设我已经部署了这个容器的n 个副本,但是如果需要它希望它能够自动扩展,并且任何新生成的副本都必须随着负载的减少而降低。

是否支持此功能?

我在 docker-forum 中找到了这个帖子,但解释不多: https ://forums.docker.com/t/ingress-load-balancing/16600/2

0 投票
2 回答
16049 浏览

docker - How is load balancing done in Docker-Swarm mode

I'm working on a project to set up a cloud architecture using docker-swarm. I know that with swarm I could deploy replicas of a service which means multiple containers of that image will be running to serve requests.

I also read that docker has an internal load balancer that manages this request distribution.

However, I need help in understanding the following:

Say I have a container that exposes a service as a REST API or say its a web app. And If I have multiple containers (replicas) deployed in the swarm and I have other containers (running some apps) that talk to this HTTP/REST service.

Then, when I write those apps which IP:PORT combination do I use? Is it any of the worker node IP's running these services? Will doing so take care of distributing the load appropriately even amongst other workers/manager running the same service?

Or should I call the manager which in turn takes care of routing appropriately (even if the manager node does not have a container running this specific service)?

Thanks.

0 投票
1 回答
2178 浏览

docker - docker stack deploy 不会移除当前 yaml compose 文件中未声明的服务

我目前在管道中使用 Docker Swarm 模式,并且我大量docker stack deploy -c compose-file.yml name-of-the-stack使用命令来使用最新的 docker 映像更新堆栈。除非我不从 yaml 文件中删除服务,否则它可以完美运行。在这种情况下,该stack deploy命令应该在更新另一个镜像的基础上删除不再存在的服务,但行为是它使容器保持运行,这不是预期的行为。因此,我用 a docker stack rm name-of-the-serviceand then改变了它docker stack deploy -c compose-file.yml name-of-stack。但这有另一个随机影响容器的可怕副作用:命令docker stack rm name-of-the-stack通常使 nginx 容器 proxypass 的可靠性完全不可靠(似乎与此问题有关https://github.com/docker/docker/issues/24244) . 事实上,nginx 容器(在另一个栈中但在同一个覆盖网络中),它负责处理容器之间的所有请求,并使用 Docker Swarm 模式的路由网格特性在它们之间进行代理传递,之后部署的堆栈的重新创建无法代理请求,例如,如果它试图将流量转发到不再存在的容器,这会使集成和行为测试失败。有没有一种方法可以在不使用 docker stack rm 的情况下进行一致的部署(到目前为止这似乎很麻烦),而是应用 yml compose 文件的最新状态?

0 投票
3 回答
26170 浏览

docker - 何时使用 Docker-Compose 以及何时使用 Docker-Swarm

我试图了解Docker-ComposeDocker-Swarm之间的差异或相似之处。

通过阅读文档,我了解到 docker-compose 提供了一种机制,可以将不同的容器绑定在一起并协同工作,作为一个单一的服务(我猜它使用的功能与用于链接两个容器的--link命令相同)

另外,我对 docker-swarm 的理解是,它允许您管理由不同docker-hosts组成的集群,每个 docker-hosts 都运行一些 docker-images 的多个容器实例。我们可以将连接定义为swarm 中不同容器之间的覆盖网络(即使它们跨越 swarm 中的两个 docker 主机),以将它们连接为一个单元。

我想了解的是 docker-swarm 是否成功 docker-compose 和覆盖网络是连接容器的新(推荐)方式?

还是说 docker-compose 仍然是整个 docker 家族中不可或缺的一部分,并且可以使用它来连接容器以协同工作。如果是这样,docker-compose 是否可以与 swarm 中不同节点的容器一起使用?

还是覆盖网络用于连接集群中不同主机的容器,而 docker-compose 用于创建内部链接?

此外,我还看到 docker 文档中提到--links不再推荐,并且很快就会过时。

我有点糊涂???

多谢!

0 投票
1 回答
388 浏览

docker - 在 swarm 中使用具有 v3 的唯一托管数据卷容器

对于我们的持续集成环境,我们想开始使用 docker swarm 和 compose 文件规范的最新版本 V3。(Docker 1.13.1 和 docker-compose 1.10.0)。

我们目前正在使用 V2,因此将所有内容部署到主机级别。

对于数据容器——数据库数据——或有状态的容器,在集群模式下本地卷是否可以工作,具有亲和力,以便数据库容器和数据容器驻留在同一主机上?说得通?

我们知道有几个插件可以处理分布式卷 -Flocker、NFS 等 --- 但我们不知道这种方案相对于本地卷的优缺点是什么,

使用 docker swarm,对于分布式有状态容器的情况,谁负责维护数据的一致性和同步?

非常感谢你的帮助

问候, 马拉诺

0 投票
1 回答
2610 浏览

docker-compose - 在将其用于 swarm 时将参数传递给 docker compose 文件

我有一个 docker swarm,我使用部署我的服务堆栈

“docker stack deploy --compose-file mycompose.yaml myservice”。

我想传递一些将在这个 yaml 文件中使用的值。我可以从命令行或通过其他方式传递它吗?