我有 3 节点 docker swarm 模式集群(1 个经理和 2 个工人)。
现在我想将 mongodb 服务部署到集群,并且我想将数据库存储在我安装在/mnt/data. 所以基本上我希望服务使用我在每个容器内安装的存储/db/data。
我如何实现这一目标?
我让自己熟悉docker service create --mount但是
volume还是 a bind-mount?volume如何告诉 docker 将此卷存储在/mnt/data要将 mongodb 服务耦合到特定节点(安装存储的位置),我将 a 添加label到相应节点并使用约束启动 docker 服务。
从最近合并到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 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
我正在使用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?
谢谢,
我有一个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
知道什么可行吗?
我试图在 swarm 模式下设置 docker 并监控在 swarm 中运行的所有服务/容器的资源利用率。
管理节点上的 Docker 统计信息似乎没有显示工作节点上的资源利用率。
有什么办法可以做到这一点吗?
谢谢。
我们已经成功创建了一个包含多个容器的Docker集群,可以说,总体而言,它工作正常。我们仍在开发产品的第一个版本,因此在产品环境中尚未部署任何产品。到目前为止,我们的配置非常简单(docker-compose.yml):一个网络,一个卷,6个服务,每个服务1个副本(打算在将来有更多副本),所有服务都是rest服务,只有1个节点(带有将来有更多节点的意图)。
我们注意到的唯一奇怪的事情是,让我们担心的是,在集群闲置了一段时间(例如,开发服务器上的任何容器上都没有传入请求)之后,我们在到达任何其他服务时都会经历高延迟仅在每次服务的第一个请求期间发生。因此,例如:
群:服务A,服务B
空闲30分钟->在30分钟内没有任何服务的传入请求
对服务A的传入请求(不可缓存请求)->(大约)20秒后响应
服务A的传入请求(不可缓存请求)->立即响应
...对服务A的进一步打击立即响应
到服务B的传入请求(不可缓存请求)->(大约)20秒后响应
服务B的传入请求(不可缓存请求)->立即响应
...对服务B的进一步打击会立即做出回应
我们进入了容器(执行bash),并注意到:
更多细节:
有人对这里可能发生的事情有任何想法吗?
docker docker-compose docker-swarm docker-networking docker-swarm-mode
假设我们有一个包含10个节点,4个管理人员和6个工作人员的测试设置。
当领导者经理失败时,其他3名经理将选择另一名经理作为领导者。
如果这位领导者也失败了,我们将只剩下2名经理。4名其他经理然后说
来自守护程序的错误响应:rpc错误:代码=未知desc =集群没有领导者。在线上的管理人员可能太少。确保一半以上的经理在线。
由于剩下的管理人员不超过一半,因此尽管剩下集群中的2名管理人员,他们将无法选择新的领导者。
我的问题是
我正在使用 swarm stack deploy 部署服务。我无法部署到其他节点,我想看看出了什么问题,但无法查看在这些节点上运行的服务/任务的日志。
我试过
码头工人堆栈 ps 堆栈名称
,它显示了“错误”列下的内容,例如“没有这样的图像”和“没有合适的节点”,但我想查看正在发生的事情的完整日志,否则似乎无法解决任何问题。
我也试过
docker 服务记录 serviceid
但什么也没显示。
最后我也尝试过:
journalctl -fu docker.service
在远程节点上,但它没有太大帮助,例如我在那里看不到:“没有合适的节点”错误。有没有办法查看日志/错误?
我在 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 ×9
docker-swarm ×7
distributed ×1
java ×1
jdbc ×1
logging ×1
nginx ×1
postgresql ×1
traefik ×1