标签: docker-swarm-mode

Docker Swarm:如何处理持久数据(例如数据库)

我有 3 节点 docker swarm 模式集群(1 个经理和 2 个工人)。

现在我想将 mongodb 服务部署到集群,并且我想将数据库存储在我安装在/mnt/data. 所以基本上我希望服务使用我在每个容器内安装的存储/db/data

我如何实现这一目标?

我让自己熟悉docker service create --mount但是

  • 我不确定我应该使用 avolume还是 a bind-mount
  • 如果我选择volume如何告诉 docker 将此卷存储在/mnt/data

要将 mongodb 服务耦合到特定节点(安装存储的位置),我将 a 添加label到相应节点并使用约束启动 docker 服务。

docker docker-swarm docker-volume docker-swarm-mode

5
推荐指数
1
解决办法
2167
查看次数

如何使主机网络与docker swarm模式一起工作

从最近合并到Docker的17.06版本候选版本的PR中,我们现在支持使用swarm服务的主机网络.但是,尝试一个非常相似的命令,我看到一个错误:

$ docker service create --name nginx-host --network host nginx                                                              
Error response from daemon: could not find the corresponding predefined swarm network: network host not found
Run Code Online (Sandbox Code Playgroud)

我正在运行17.06版本的候选人:

$ docker version
Client:
 Version:      17.06.0-ce-rc2
 API version:  1.30
 Go version:   go1.8.3
 Git commit:   402dd4a
 Built:        Wed Jun  7 10:07:14 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.06.0-ce-rc2
 API version:  1.30 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   402dd4a
 Built:        Wed Jun  7 10:06:06 2017
 OS/Arch:      linux/amd64
 Experimental: true
Run Code Online (Sandbox Code Playgroud)

与docker现在支持的命令有什么不同?

docker docker-swarm-mode

5
推荐指数
1
解决办法
3790
查看次数

Docker Swarm发现仍然相关吗?

我正在学习docker swarm,并对群发现选项感到困惑,我看到互联网上的很多教程都使用这个选项来创建带有docker-machine的容器,但是当我输入docker swarm doc上的文档时,它说:

您正在查看旧版独立Swarm的文档.这些主题描述了独立的Docker Swarm.在Docker 1.12及更高版本中,Swarm模式与Docker Engine集成在一起.大多数用户应该使用集成的Swarm模式.

那么,发现选项的用例是什么?所有教程都使用docker-machine创建一个swarm,我总是需要它,或者只是在我的集群中的机器上安装docker,将它们加入swarm并使用normal?

我看到了一些像Docker Swarm和的名字Docker Swarm Mode,是否有任何不同或只是不同的方式来调用相同的功能?

distributed cluster-computing docker docker-swarm docker-swarm-mode

5
推荐指数
1
解决办法
299
查看次数

Trafik Docker Swarm模式真正IP背后的Nginx

我正在使用Traefik作为docker swarm环境上nginx服务之前的反向代理。这是我的docker-stack.yml:

traefik:
    image: traefik
    command: -c /dev/null --web --docker --docker.swarmmode --docker.watch --docker.domain=domain --logLevel=DEBUG
    ports:
      - "8080:8080"
      - "80:80"
      - "443:443"
    networks:
       - app
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints: [node.role == manager]

nginx:
    image: nginx
    networks:
      - app
    deploy:
      labels:
        traefik.port: 80
        traefik.docker.network: app
        traefik.frontend.rule: "Host:app.domain"
Run Code Online (Sandbox Code Playgroud)

一切正常,但是我需要在Nginx访问日志中使用真实的客户端IP,相反,我得到的信息类似于10.0.1.37

如何获得真实的客户IP?

谢谢,

nginx docker docker-swarm traefik docker-swarm-mode

5
推荐指数
1
解决办法
3963
查看次数

如何在Docker Swarm中连接到Postgresql服务?

我有一个Docker Swarm集群设置有3个服务器(1个管理员和2个工作人员).

我使用以下命令启动了Postgresql服务:

docker service create --name postgresql \
  --mount src=pg_data,dst=/var/lib/postgresql/data/pgdata \
  -p 6542:5432 \
  -e POSTGRES_USER="user" \
  -e POSTGRES_DB="db" \
  -e POSTGRES_PASSWORD="pass" \
  -e PGDATA=/var/lib/postgresql/data/pgdata \
  --constraint 'node.role == manager' \
  postgres
Run Code Online (Sandbox Code Playgroud)

我之前也创建过数据卷:

docker volume create pg_data
Run Code Online (Sandbox Code Playgroud)

现在,我有另一个我想要启动的服务,它基本上是一个捆绑到Docker镜像中的Java应用程序,我想将它连接到postgresql服务.我为网址尝试了以下组合:

jdbc:postgresql://172.18.0.1:5432/db(docker_gwbridge)

jdbc:postgresql://172.17.0.1:5432/db(docker0)

JDBC:在PostgreSQL://本地主机:5432/DB

JDBC:在PostgreSQL:// PostgreSQL的:5432/DB

知道什么可行吗?

java postgresql jdbc docker docker-swarm-mode

5
推荐指数
1
解决办法
1406
查看次数

Swarm 模式下的 docker stats?

我试图在 swarm 模式下设置 docker 并监控在 swarm 中运行的所有服务/容器的资源利用率。

管理节点上的 Docker 统计信息似乎没有显示工作节点上的资源利用率。

有什么办法可以做到这一点吗?

谢谢。

docker resource-utilization docker-swarm docker-swarm-mode

5
推荐指数
1
解决办法
5389
查看次数

集群闲置了一段时间后到达Docker容器的高延迟

我们已经成功创建了一个包含多个容器的Docker集群,可以说,总体而言,它工作正常。我们仍在开发产品的第一个版本,因此在产品环境中尚未部署任何产品。到目前为止,我们的配置非常简单(docker-compose.yml):一个网络,一个卷,6个服务,每个服务1个副本(打算在将来有更多副本),所有服务都是rest服务,只有1个节点(带有将来有更多节点的意图)。

我们注意到的唯一奇怪的事情是,让我们担心的是,在集群闲置了一段时间(例如,开发服务器上的任何容器上都没有传入请求)之后,我们在到达任何其他服务时都会经历高延迟仅在每次服务的第一个请求期间发生。因此,例如:

群:服务A,服务B

空闲30分钟->在30分钟内没有任何服务的传入请求

对服务A的传入请求(不可缓存请求)->(大约)20秒后响应

服务A的传入请求(不可缓存请求)->立即响应

...对服务A的进一步打击立即响应

到服务B的传入请求(不可缓存请求)->(大约)20秒后响应

服务B的传入请求(不可缓存请求)->立即响应

...对服务B的进一步打击会立即做出回应

我们进入了容器(执行bash),并注意到:

  1. Ping到其他容器IP会立即响应
  2. ping到其他容器名称(dns)具有提到的延迟(高延迟)
  3. 容器名称(dns)解析会立即发生(因此它不是dns级别的延迟)

更多细节:

  • 主机操作系统:Ubuntu 16.04
  • Docker版本:17.06.0-ce

有人对这里可能发生的事情有任何想法吗?

docker docker-compose docker-swarm docker-networking docker-swarm-mode

5
推荐指数
0
解决办法
450
查看次数

为什么根本要为docker swarm集群中的节点选择充当工作者的角色?

假设我们有一个包含10个节点,4个管理人员和6个工作人员的测试设置。

当领导者经理失败时,其他3名经理将选择另一名经理作为领导者。

如果这位领导者也失败了,我们将只剩下2名经理。4名其他经理然后说

来自守护程序的错误响应:rpc错误:代码=未知desc =集群没有领导者。在线上的管理人员可能太少。确保一半以上的经理在线。

由于剩下的管理人员超过一半,因此尽管剩下集群中的2名管理人员,他们将无法选择新的领导者。

我的问题是

  1. 之所以具有这种规则的意义,是因为该集群没有领导者,并且只要没有其他管理器添加到集群中就不再可以管理,尽管有2个管理器可用。
  2. 为什么我应该为所有节点选择角色工作者?将节点作为工作人员有什么优势?默认情况下,管理器还充当工作程序,其缺点是当管理器节点发生故障时它们无法接管。

docker docker-swarm docker-engine docker-swarm-mode

5
推荐指数
1
解决办法
713
查看次数

堆栈部署服务的 Docker 日志/错误

我正在使用 swarm stack deploy 部署服务。我无法部署到其他节点,我想看看出了什么问题,但无法查看在这些节点上运行的服务/任务的日志。

我试过

码头工人堆栈 ps 堆栈名称

,它显示了“错误”列下的内容,例如“没有这样的图像”和“没有合适的节点”,但我想查看正在发生的事情的完整日志,否则似乎无法解决任何问题。

我也试过

docker 服务记录 serviceid

但什么也没显示。

最后我也尝试过:

journalctl -fu docker.service

在远程节点上,但它没有太大帮助,例如我在那里看不到:“没有合适的节点”错误。有没有办法查看日志/错误?

logging docker docker-swarm-mode

5
推荐指数
2
解决办法
5679
查看次数

网络 `hbase` 被声明为外部网络,但无法找到。在部署堆栈之前,您需要创建一个 swarm 范围的网络

我在 docker swarm 集群下面。

    $ sudo docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    iq7i01ns7ku7zrtaemiucoawi *   master.com          Ready               Active              Leader              19.03.2
    g6mug58tld4aikobdv3ic9p9y     worker1.com         Ready               Active                                  19.03.2
    uc13xcl9ttauzkqdz03kbrewt     worker2.com         Ready               Active                                  19.03.2
    c8uhfvyhhlmuxp2p3ei3ymrj5     worker3.com         Ready               Active                                  19.03.2
Run Code Online (Sandbox Code Playgroud)

我想将hadoop平台部署到集群中。

    $ sudo docker stack deploy -c docker-compose-v3.yml hadoop
    network "hbase" is declared as external, but could not be found. You need to create a swarm-scoped network before the stack is deployed
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

docker-compose docker-swarm docker-swarm-mode

5
推荐指数
1
解决办法
7567
查看次数