我正在Swarm集群上运行服务,感谢docker stack deploy --with-registry-auth和这个撰写文件:
version: "3.1"
services:
builder-consumer:
image: us.gcr.io/my-gcloud-project/my/image:123
stop_grace_period: 30m
volumes:
- [...]
environment:
- [...]
deploy:
mode: global
placement:
constraints:
- node.role == worker
secrets:
- [...]
secrets:
[...]
Run Code Online (Sandbox Code Playgroud)
这在部署时工作正常,但是当我稍后向群添加工作节点时,新工作人员无法提取运行任务所需的映像.系统日志报告:
level = error msg ="在请求\"/ v2/my-gcloud-project/my/image/manifests/123 \"之后,不继续执行错误后拉:拒绝:\ 123 \"权限被拒绝."
level = info msg ="翻译"被拒绝:来自请求\\"/ v2/my-gcloud-project/my/image/manifests/123 \\"的\\"123 \\"权限被拒绝.\"到\"存储库us.gcr.io/my-gcloud-project/my/image未找到:不存在或没有拉取访问权限"""
level = error msg ="pull image failed"error ="repository us.gcr.io/my-gcloud-project/my/image not found:不存在或没有pull access"module ="node/agent/taskmanager"节点.id = ... service.id = ... task.id = ...
level = error …
Docker Swarm 模式路由网格是 linkerd 路由网格的内置替代品吗?换句话说,如果有开箱即用的解决方案,还有理由研究 linkerd 吗?
我曾经将映像版本外部化为.env文件。这使维护变得容易,而且我docker-compose.yml不仅仅为了升级版本就修改文件,所以我确定我不会误删一行。
但是当我尝试将我的服务部署stack到时swarm,docker引擎抱怨我的映像不是正确的存储库/标签,并带有以下确切消息:
来自守护程序的错误响应:rpc错误:代码= 3 desc = ContainerSpec:“组/图像:”不是有效的存储库/标签
要解决此问题,我可以直接在docker-compose.yml文件中修复映像版本。这里有逻辑还是一个错误?但这混合了docker-compose和变量部分的修复部分。
干杯,奥利维尔
我目前在管道中使用Docker Swarm模式,我使用大量docker stack deploy -c compose-file.yml name-of-the-stack的命令来更新堆栈与最新的docker镜像.它完全有效,除非我不从yaml文件中删除服务.在这种情况下,stack deploy命令应该在更新另一个的映像之上删除不再存在的服务,但行为是它使容器保持运行并且这不是预期的行为.由于这个结果我有改变了它docker stack rm name-of-the-service,然后docker stack deploy -c compose-file.yml name-of-stack.但这有另一个可怕的副作用,随机影响容器:命令docker stack rm name-of-the-stack经常使nginx容器代理的可靠性完全不可靠(似乎与此问题相关https://github.com/docker/docker/issues/24244).事实上,nginx容器(在另一个堆栈中,但在相同的覆盖网络中),负责处理容器之间的所有请求,并使用Docker Swarm模式的路由网格功能在它们之间进行代理传递.重新创建部署的堆栈,无法代理请求,就好像它试图将流量转发到没有更多的现有容器,这使得集成和行为测试失败.是否有一种方法可以在不使用docker stack rm的情况下进行一致的部署(到目前为止看起来非常错误)但是应用了yml compose文件的最新状态?
Jenkins构建部分中的Bash脚本
#!/bin/sh
docker build -t smstake:latest .
#Push to the private repository applying the proper tags for the image
docker tag smstake:latest reg01.dev.01cloud.com:5000/smstake:1.0.1
docker push reg01.dev.01cloud.com:5000/smstake:1.0.1
docker stack rm smstake
docker stack deploy -c docker-compose.yml smstake
Run Code Online (Sandbox Code Playgroud)
问题是它在第一次构建时失败了,并且发布了一些网络问题.如果再次构建,它将在另一个构建上成功运行.我该如何解决这个问题.
我得到的错误:
Removing service smstake_app
Removing service smstake_db
Removing service smstake_phpmyadmin
Removing network smstake_smstake
Creating service smstake_app
failed to create service smstake_app: Error response from daemon: network smstake_smstake not found
Build step 'Execute shell' marked build as failure
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)
正如我们可以看到它删除服务并在服务创建过程中抛出网络未发现问题. …
docker docker-compose docker-swarm docker-swarm-mode docker-stack
我试图在docker swarm中将我的docker服务连接在一起。
网络由2个覆盆子pi组成。
我可以创建一个名为的覆盖网络,test-overlay并且可以看到任何一个树莓派节点上的服务都可以连接到该网络。
我无法链接到覆盖网络节点之间的服务。
给定以下节点和服务配置,service1可以使用该地址http://service2连接到 service2。但不适用于http://service3。但是http://service3可以从访问service4。
node1:
- service1
- service2
node2:
- service3
- service4
Run Code Online (Sandbox Code Playgroud)
我是docker swarm的新手,感谢您的帮助。
我sudo docker inspect network test-overlay在两个节点上都运行了命令。
在主节点上,这将返回以下内容:
[
{
"Name": "test-overlay",
"Id": "skxhz8sb3f82dhh9jt9t3j5yl",
"Created": "2018-04-15T20:31:20.629719732Z",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": { …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建 docker swarm 服务,但出现了一些奇怪的行为:
对于某些图像,它是成功的,对于某些图像,我收到错误消息:
docker service create nginx
89t21k3udf007pvl2ucvmdp9l
overall progress: 1 out of 1 tasks
1/1: running [==================================================>]
verify: Service converged --> 成功
docker service create hello-world
8hhdki32ypfwshh2wvijkkmvb
overall progress: 0 out of 1 tasks
1/1: preparing [=================================> ]
verify: Detected task failure --> 失败
供您参考:docker pull hello-world工作正常。
我的印象是我们可以为所有图像创建服务,是否有任何条款和条件?我错过了什么吗?
注意:这是基本部分,但我的主要目的是为本地注册表镜像创建服务。但是在调试的第一步中发现了问题,即hello-world。
我是docker swarm模式的新手,如果我想了解我的swarm服务的更多详细信息,可以从命令行运行docker service ps“服务名”,也可以从docker rest运行“ / v2 / services / my-ngx”
[msreddy@swarmnode1 ~]$ docker service ps my-ngx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
voj7fllhnmqb my-ngx.1 nginx:latest swarmnode1 Running Running 26 minutes ago
但是它没有给我容器ID。我想从群服务中跟踪容器吗?
我在具有 1 个主节点和 3 个工作节点的 docker swarm 集群上启动了 Flask API 服务。我已经使用以下 docker compose 文件部署了任务,
version: '3'
services:
xgboost-model-api:
image: xgboost-model-api
ports:
- "5000:5000"
deploy:
mode: global
networks:
- xgboost-net
networks:
xgboost-net:
Run Code Online (Sandbox Code Playgroud)
我使用以下 docker swarm 命令部署了该任务,
docker stack deploy --compose-file docker-compose.yml xgboost-swarm
Run Code Online (Sandbox Code Playgroud)
但是,该任务仅在我的主节点上启动,而不在任何工作节点上启动。
$ docker service ls
ID NAME MODE REPLICAS IMAGE
pgd8cktr4foz viz replicated 1/1
dockersamples/visualizer
twrpr4av4c7f xgboost-swarm_xgboost-model-api global 1/4 xgboost-model-api
xxrfn1w7eqw6 dockercloud-server-proxy global 1/1 dockercloud/server-proxy
Run Code Online (Sandbox Code Playgroud)
使用的 Dockerfile 在这里。任何关于为什么会发生这种行为的想法将不胜感激。