问题标签 [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.
docker - 在 docker swarm 中推出更新
使用 spring 初始化器创建了一个微服务应用程序并使用 docker 部署。
为了推出最新的更改,使用最新的代码更改创建 docker 映像
应用程序正在运行 2 个副本。使用 docker service update 更新服务。
任何人都可以帮助我提供示例堆栈和最佳实践来部署零停机时间。
docker - 将 Docker 命令添加到我的 Docker 容器中
我有一个人们已经讨论过的问题,但没有到这个程度。
我正在制作一个 Docker Swarm 健康检查器,它会定期发布我环境中 Docker 节点的健康状况。我遇到了如何从容器中运行我的 Docker 命令的问题。我找到了一个帖子,您可以在其中运行此命令:
它会像我想要的那样工作。问题是我希望它在一个从堆栈中的文件运行的容器中。我已经尝试了所有的卷安装组合。这是我最近做的,但仍然没有用。我是否错过了将 Docker 放入我的容器的明显步骤?
docker - 交错的 docker 堆栈部署
我创建了一个 docker 映像来运行清漆。它通过了清漆 .vcl 配置文件,设置了自定义端口并且它可以工作。我正在一台服务器上推出多个容器,每个容器都有自定义配置和端口。所以我写了一个docker-compose.yml
文件来定义它。使用docker stack deploy
我可以让它们全部运行。
如果我想调整 docker 图像,问题就来了。目前,我正在更新docker-compose.yml
文件中的版本并重新运行docker stack deploy
关闭所有 docker 并再次启动它们的命令。我想错开重新部署,以便一次更新一个,因为一次完成所有这些会导致服务器上的大量负载,随着我们的扩展只会变得更糟。
我怎样才能做到这一点?对于这种情况是否有更好的方法?
提前致谢!
当前 docker-compose.yml 文件:
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
我怎样才能让我的服务再次运行?
docker - 如何更新我的 docker 服务/堆栈使用的最新图像?
在.yml
定义中,我总是拉扯latest
我的服务形象。
当我将新图像推送到注册表时,我想更新堆栈中的服务使用的图像。我没有看到任何--pull
标志,并且docker service update的文档没有明确提到这一点。
如何使用最近推送的latest
镜像重新部署?
docker - 在 Docker 中,从单独的组合文件组合复杂的堆栈是一种好习惯吗?
我们正在移动我们的一些内部服务以依赖 Docker,而不是直接安装在主机操作系统上(好东西,对 :)。
我们将docker stack
命令与 compose 文件一起使用(我们觉得这是现代方法)。但是我们不确定如何正确地使我们的堆栈模块化,同时允许组合:
假设我们有两个堆栈:stackA
和stackB
. 这两个可以完美地单独使用,所以目前我们决定将它们托管在两个单独的存储库中,每个存储库都包含docker-compose.yml
相应堆栈的。
然而,还有一种模式stackB
可以与之通信stackA
以提供附加功能。在某些节点上,我们可能希望同时部署两者,并让它们进行通信。
默认情况下,当我们在同一个节点上启动两个堆栈时:
两者最终都位于不同的覆盖网络上,并且无法轻松通信。
看来我们面临着一个选择,目前我们只能找到 3 个选项:
- 我们已经看到了
stackB
在其 compose 文件中添加外部网络的方法,但这意味着现在stackB
只能在stackA
已经运行的情况下部署(因为它想加入外部网络) - 我们可以定义另一个 compose 文件,手动合并两者。但这导致我们维护另一个 repo,并重复更改。
- 我们可以让堆栈通过暴露的端口通过主机网络进行通信,但这可能感觉有点奇怪。
是否有最佳/推荐的方法来保持不同的堆栈模块化,同时允许轻松组合它们?
或者是一个隐含的假设,即一旦两个容器应该进行通信,它们就必须从同一个 compose 文件中部署?
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),我仍然遇到此问题。
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 之间似乎没有太大区别。任何关于接下来要查看或尝试的内容的指示将不胜感激。
docker - docker swarm 中的多个标签放置约束
当我给出多个标签放置约束并部署堆栈时,服务并未在上述任何一个约束中运行。
前任:
但是,如果我只给出一个约束(任何一个),那么它就在那个标签节点中工作。
我在这里看到了同样的情况。不同之处在于使用了两种约束(节点类型和标签)。但我只使用了一种(标签)。
是否允许使用相同类型的约束。如果是如何使用它。
更新
前任:
现在这应该在两台服务器上运行该服务。但是服务根本没有启动。