问题标签 [docker-stack]

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 回答
1791 浏览

docker - 在 docker swarm 中推出更新

使用 spring 初始化器创建了一个微服务应用程序并使用 docker 部署。

为了推出最新的更改,使用最新的代码更改创建 docker 映像

应用程序正在运行 2 个副本。使用 docker service update 更新服务。

任何人都可以帮助我提供示例堆栈和最佳实践来部署零停机时间。

0 投票
1 回答
60 浏览

docker - 将 Docker 命令添加到我的 Docker 容器中

我有一个人们已经讨论过的问题,但没有到这个程度。

我正在制作一个 Docker Swarm 健康检查器,它会定期发布我环境中 Docker 节点的健康状况。我遇到了如何从容器中运行我的 Docker 命令的问题。我找到了一个帖子,您可以在其中运行此命令:

它会像我想要的那样工作。问题是我希望它在一个从堆栈中的文件运行的容器中。我已经尝试了所有的卷安装组合。这是我最近做的,但仍然没有用。我是否错过了将 Docker 放入我的容器的明显步骤?

0 投票
2 回答
641 浏览

docker - 交错的 docker 堆栈部署

我创建了一个 docker 映像来运行清漆。它通过了清漆 .vcl 配置文件,设置了自定义端口并且它可以工作。我正在一台服务器上推出多个容器,每个容器都有自定义配置和端口。所以我写了一个docker-compose.yml文件来定义它。使用docker stack deploy我可以让它们全部运行。

如果我想调整 docker 图像,问题就来了。目前,我正在更新docker-compose.yml文件中的版本并重新运行docker stack deploy关闭所有 docker 并再次启动它们的命令。我想错开重新部署,以便一次更新一个,因为一次完成所有这些会导致服务器上的大量负载,随着我们的扩展只会变得更糟。

我怎样才能做到这一点?对于这种情况是否有更好的方法?

提前致谢!

当前 docker-compose.yml 文件:

0 投票
4 回答
7189 浏览

docker - 服务重启后 Docker 节点关闭

看来我的服务器空间不足,并且我在一些部署的 docker 堆栈上遇到了一些问题。我花了一段时间才弄明白,但最终我还是删除了几个容器和图像以释放一些空间。

我能够运行service docker restart并且它起作用了。但是,存在一些问题:

  • docker info说群是“待定”
  • docker node ls显示我拥有的唯一节点(领导者),available但它是down
  • journalctl -f -u docker说 `level=error msg="error 删除任务" error="incompatible value module=node/agent/worker node.id="

运行时docker service ls,所有服务都有0/1副本。

这是运行时的状态docker node ls

我怎样才能让我的服务再次运行?

0 投票
3 回答
15774 浏览

docker - 如何更新我的 docker 服务/堆栈使用的最新图像?

.yml定义中,我总是拉扯latest我的服务形象。

当我将新图像推送到注册表时,我想更新堆栈中的服务使用的图像。我没有看到任何--pull标志,并且docker service update的文档没有明确提到这一点。

如何使用最近推送的latest镜像重新部署?

0 投票
1 回答
247 浏览

docker - 在 Docker 中,从单独的组合文件组合复杂的堆栈是一种好习惯吗?

我们正在移动我们的一些内部服务以依赖 Docker,而不是直接安装在主机操作系统上(好东西,对 :)。

我们将docker stack命令与 compose 文件一起使用(我们觉得这是现代方法)。但是我们不确定如何正确地使我们的堆栈模块化,同时允许组合:


假设我们有两个堆栈:stackAstackB. 这两个可以完美地单独使用,所以目前我们决定将它们托管在两个单独的存储库中,每个存储库都包含docker-compose.yml相应堆栈的。

然而,还有一种模式stackB可以与之通信stackA以提供附加功能。在某些节点上,我们可能希望同时部署两者,并让它们进行通信。

默认情况下,当我们在同一个节点上启动两个堆栈时:

两者最终都位于不同的覆盖网络上,并且无法轻松通信。

看来我们面临着一个选择,目前我们只能找到 3 个选项:

  • 我们已经看到了stackB在其 compose 文件中添加外部网络的方法,但这意味着现在stackB只能在stackA已经运行的情况下部署(因为它想加入外部网络)
  • 我们可以定义另一个 compose 文件,手动合并两者。但这导致我们维护另一个 repo,并重复更改。
  • 我们可以让堆栈通过暴露的端口通过主机网络进行通信,但这可能感觉有点奇怪。

是否有最佳/推荐的方法来保持不同的堆栈模块化,同时允许轻松组合它们?

或者是一个隐含的假设,即一旦两个容器应该进行通信,它们就必须从同一个 compose 文件中部署?

0 投票
1 回答
538 浏览

docker - 堆叠后 Docker 套接字崩溃

我尝试部署 docker stack,其中包括我的开发环境。但在随机情况下,我有下一个错误:

接下来我重新启动 docker 守护进程。有时它需要杀死 docker 进程和垫片。我删除旧堆栈并重新构建。有时 docker 成功完成构建,但套接字在开始阶段崩溃。

当我以常规模式启动它时,所有容器都可以正常工作,没有群或堆栈。它不能完全在 swarm 内部工作。

我已经使用下一个命令来构建:

在 Antergos Linux(Arch) 中运行的环境。

布局如图所示 在此处输入图像描述

使用命令创建的 Nginx 容器和 docker 网络:

我的 docker-compose.yml 文件:

0 投票
2 回答
5906 浏览

docker - 部署堆栈后向堆栈添加服务

在已经部署堆栈后,我正在尝试向堆栈添加服务。但是这个新服务在与堆栈内的服务(redis)通信时遇到了问题。

这是我目前对堆栈和服务的理解,如果有任何不准确之处,请告诉我。

堆栈是服务之上的抽象,它提供有用的实用程序(如 DNS),因此堆栈中的服务可以相互通信。堆栈允许我们在逻辑上分离出可能在同一个 swarm 上运行的服务组(因此不同的开发团队可以共享同一个 swarm)。

我想首先将堆栈部署到 swarm(通过 compose 文件),然后定期添加容器,如本文中关于一次性容器的描​​述。这些容器是不同的,因为它们执行的是长时间的、有状态的操作。他们需要以某种初始状态启动,完成他们的工作,然后离开。它们是不同的,因为它们不需要被复制或负载平衡。

基本上我想做的是:

像这样启动一个“堆栈”:

docker stack deploy --with-registry-auth --compose-file docker-compose.yml my-stack

然后一段时间后,当满足某些条件时,添加一个像这样的容器:

docker service create -name statefulservice reponame/imagename

这通常表现如预期,除了 statefulservice 无法与 my-stack 中的 redis 对话。

我相信 statefulservice 的设计是正确的,因为当它被添加到 docker-compose.yml 时,它的行为符合预期。

另一个可能相关也可能不相关的细节是,创建新服务的命令是从 swarm 中的容器发出的。这是使用 docker 的 go sdk 发生的,我正在按照一次性容器文章描述的方式使用它

我怀疑这不相关的原因:当我仅通过 docker-cli 执行此操作时(并且不使用 docker sdk for go),我仍然遇到此问题。

0 投票
2 回答
1764 浏览

docker - 同一网络上的 Docker 容器无法访问彼此的暴露端口(Linux)

这是我部署的一个相当简单的 docker 堆栈:

在 docker stack deploy 之后,我可以看到所有服务都在运行。但是,当我尝试从主机系统上的程序(例如 Postman)访问存储库或部署服务的 REST API 时,这不起作用(连接只是挂起)。所以我做了一些调试:

1)容器可以使用服务名称在覆盖网络上相互ping通。例如

2)从一个容器我可以使用 curl 访问另一个容器,但只能在内部端口上。

例如这有效:

但这会返回一个错误:

3)覆盖网络似乎缺少信息:

当我尝试在我的 Mac 上部署这个确切的堆栈时,它可以工作!对覆盖网络的相同检查提供的信息要多得多。一方面,它显示了一个容器列表,还给了我一个子网和网关。

不知何故,在我的 Linux 机器上,overlay 的网络设置不正确。我不确定我可能错过了什么配置。Mac 的 docker stack/swarm 和 Linux 的 docker stack/swarm 之间似乎没有太大区别。任何关于接下来要查看或尝试的内容的指示将不胜感激。

0 投票
1 回答
6372 浏览

docker - docker swarm 中的多个标签放置约束

当我给出多个标签放置约束并部署堆栈时,服务并未在上述任何一个约束中运行。

前任:

但是,如果我只给出一个约束(任何一个),那么它就在那个标签节点中工作。

我在这里看到了同样的情况。不同之处在于使用了两种约束(节点类型和标签)。但我只使用了一种(标签)。

是否允许使用相同类型的约束。如果是如何使用它。

更新

前任:

现在这应该在两台服务器上运行该服务。但是服务根本没有启动。