是否可以从我的本地mac在云托管的docker swarm集群上执行命令?如果有,怎么样?
我想执行命令,例如从我的本地执行docker swarm:
docker create secret my-secret <address to local file>
docker service create --name x --secrets my-secret image
Run Code Online (Sandbox Code Playgroud) 我在一个虚拟机中有一个docker swarm,它有2个核心4GB ram Centos.
在我部署docker私有注册表(注册表2.6.4)时,它将服务状态显示为永久挂起.我用了
docker service ps <<registry_name>>
当我docker inspect <<task_id>>在消息中检查使用时,我得到了
"没有合适的节点(在1节点上不满足调度约束)".
我尝试了服务重启和重新部署.
如何解决这个问题?
我很难理解replicaDocker Swarm模式中实例的想法.我已经读过它是一个有助于提高可用性的功能.
但是,如果一个节点发生故障,即使replica为服务定义了一个节点,Docker也会自动在另一个节点上启动新任务,这也提供了高可用性.
那么,replica对于任意服务,有3个实例而不是1 个实例的优势是什么?我的假设是,如果有更多副本,Docker会在发生故障时花费更少的时间在另一个节点上创建新实例,这有助于提高性能.它是否正确?
我正在尝试在堆栈部署后向堆栈添加服务。但是这个新服务在与堆栈内的服务(redis)通信时遇到了麻烦。
这是我目前对堆栈和服务的理解,如果有任何不准确之处,请告诉我。
堆栈是服务之上的抽象,它提供有用的实用程序,例如 DNS,因此堆栈中的服务可以相互通信。堆栈允许我们在逻辑上分离出可能运行在同一个群上的服务组(因此不同的开发团队可以共享同一个群)。
我想首先将一个堆栈部署到一个 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 中的容器发出的。这是使用 go sdk for docker 发生的,我正在按照一次性容器文章描述的方式使用它
我怀疑这无关紧要的原因:当我仅通过 docker-cli 执行此操作时(并且不使用 docker sdk for go),我仍然遇到这个问题。
docker docker-compose docker-swarm docker-swarm-mode docker-stack
我将nginx代理服务和rails应用服务部署到docker swarm中.nginx依赖于我的docker-compose文件中的应用程序.
我的nginx.conf文件将流量定向到我的上游应用服务(在端口3000上公开),如此(仅显示上游部分).
upstream puma {
server app:3000;
}
Run Code Online (Sandbox Code Playgroud)
我的docker-compose文件看起来像这样:
version: '3.1'
services:
app:
image: my/rails-app:latest
networks:
- proxy
web:
image: my/nginx:1.11.9-alpine
command: /bin/sh -c "nginx -g 'daemon off;'"
ports:
- "80:80"
depends_on:
- app
networks:
- proxy
networks:
proxy:
external: true
Run Code Online (Sandbox Code Playgroud)
我的主机设置为群体管理器.
这一切都很好 - 没有问题.
但是,即使我在docker-compose文件中有一个depends部分 - 在nginx服务启动时,app服务可能还没有完全准备好(?),所以当上游服务配置部分尝试DNS解析"app: 3000",似乎没有完全找到它.因此,当我访问我的网站时,我在我的nginx日志中发现以下错误消息:
2017/02/13 10:46:07 [error] 8#8: *6 connect() failed (111: Connection refused) while connecting to upstream, client: 10.255.0.3, server: www.mysite.com, request: "GET / HTTP/1.1", upstream: "http://127.0.53.53:3000/", host: …Run Code Online (Sandbox Code Playgroud) 我有一个由一个管理器和一个工作节点组成的docker swarm集群.然后我从笔记本电脑配置(tls和DOCKER_HOST)客户端以访问此群集.
当我运行时,docker ps我只看到来自工作节点的容器(而不是工作节点(!)的所有容器).例如,来自我的客户:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a129d9402aeb progrium/consul "/bin/start -rejoi..." 2 weeks ago Up 22 hours IP:8300-8302->8300-8302/tcp, IP:8400->8400/tcp, IP:8301-8302->8301-8302/udp, 53/tcp, 53/udp, IP:8500->8500/tcp, IP:8600->8600/udp hadoop1103/consul-agt2-hadoop
Run Code Online (Sandbox Code Playgroud)
我docker ps在工作节点上运行:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4fec7fbf0b00 swarm "/swarm join --advert" 16 hours ago Up 16 hours 2375/tcp join
a129d9402aeb progrium/consul "/bin/start -rejoin -" 2 weeks ago Up 22 hours 0.0.0.0:8300-8302->8300-8302/tcp, 0.0.0.0:8400->8400/tcp, 0.0.0.0:8301-8302->8301-8302/udp, 53/tcp, 53/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp consul-agt2-hadoop …Run Code Online (Sandbox Code Playgroud) 我有一个基于Java的Web应用程序部署在jboss-10.1.0(wildfly).我正在使用docker swarm模式(docker版本1.12.1)扩展我的应用程序一切正常,但我面临的唯一问题是会话管理.
现在让我们来看看情景.
我有两个实例正在运行我的应用程序(即App1和App2).我使用docker swarm模式提供的默认负载均衡器nginx来重定向我的应用程序chintan.test.com:9080,chintan.test.com:80以便我不需要用我的url写下端口,我能够直接使用此URL访问chintan.test.com.
现在,默认的负载均衡器正在使用RR(Round-Robin algorithm)来提供我的Web请求.所以我第一次访问chintan.test.com它时会转到App1实例并显示登录页面我使用凭据登录,一切都运行完美,几分钟后它又切换到App2登录页面来了.
有没有办法或工具(应该是开源的)我通过它来处理会话?所以至少我登录App1并坚持到App1我退出为止.
谢谢!
load-balancing docker wildfly docker-swarm docker-swarm-mode
我正在尝试在 Hetzner 云上设置一个 3 节点 Docker swarm 集群,使用wireguard VPN(在接口上设置wg0)在节点之间构建本地网络。网络可以跨使用VPN的IP节点罚款(端口7946/tcp,7946/udp并且4789/udp是开放的报道在这里)。我使用以下命令启动 docker swarm 集群:
docker swarm init --advertise-addr wg0 --listen-addr wg0
docker swarm join --token SWMTKN-1-xxx --advertise-addr wg0 --listen-addr wg0 10.0.0.1:2377
Run Code Online (Sandbox Code Playgroud)
如果我尝试在这个 swarm 上运行一个服务,它似乎运行正确,每个容器都可以在不同的节点上到达另一个节点并检查它们,它们加入了入口网络和我创建的覆盖网络,正如预期的那样。当我尝试从服务公开端口之外访问时出现问题;它仅在我以容器运行的节点为目标时才有效,因此似乎路由网格无法正常工作。我在 docker 日志或系统日志中没有发现任何错误。
注意:我正在使用 docker 18.06.1-ce
我看到很多在集群模式下运行多个 Docker 节点的示例,但它们都提到节点共享本地/专用网络。我想知道,是否可以连接群上不在专用网络上的两台主机,但仍然可以通过 IP 相互访问并设置正确的端口?
这不适用于生产设置。
是否有任何 Swarm 机制可以阻止这种架构?
感谢您的时间 !
我知道docker-swose与docker-swarm(现在是遗留的)能够在一个节点上共同调度一些服务(使用依赖性过滤器,如链接)
我想知道使用现代docker引擎群模式和Docker 1.13中引入的新堆栈部署是否可以实现这种协同调度
在docker-compose文件版本3中,在群集中部署堆栈时会说链接被忽略,因此显然链接不是解决方案.
我们有一堆服务器来运行批量短期运行的作业,它们之间的网络速度不是很高.我们希望在一台服务器上运行每个批处理作业(由多个容器组成),以避免网络开销.这个功能是在docker stack或docker swarm模式下实现的,还是我们应该使用传统的docker-swarm?
此外,我找不到放置策略中与另一个容器的共同调度.