没有合适的节点 - 无法使用docker服务部署映像

时间:2018-02-24 11:36:26

标签: docker arm raspberry-pi3 docker-swarm

我有一个基于raspberry pi 3的docker swarm。我有3个节点。我在笔记本电脑上创建了一个图像并将其推送到docker注册表。

如果我尝试使用docker run在swarm中的节点上启动图像,它将按预期工作。

docker run -ti alexellis2/pi-sharp:0.1

但是如果我尝试使用docker服务启动它就会失败。

docker service create --name test alexellis2/pi-sharp:0.1

错误      1/1:没有合适的节点(3个节点上不支持的平台)

如果我在服务上进行码头工作检查,则会显示此信息。

"Placement": {
                    "Platforms": [
                        {
                            "Architecture": "amd64",
                            "OS": "linux"
                        }
                    ]
                },

我试图修剪容器和图像无济于事。

我的问题是为什么我能够使用docker run但不使用docker服务来使用图像?

3 个答案:

答案 0 :(得分:0)

在构建内置PC时,构建环境为 x86 。 如果你在Pi上构建图像,构建环境和架构是 armhf

这些图像不是跨平台的,这是现今已知的问题。 https://developer.ibm.com/linuxonpower/2017/07/27/create-multi-architecture-docker-image/

你可能是对的,在某些情况下,docker run与docker service可能会工作异常(docker service导致错误状态,docker run工作)

答案 1 :(得分:0)

由docker解析图像存在一些问题。
当我输入

  

码头工人信息

在其中一行中,我看到:

Architecture: armv7l

但是当我在同一台机器上构建映像时。然后检查图像

  

docker image inspect 7c2f63598729

在其中一行中,我看到的是

"io.resin.architecture": "armhf",

这怎么可能? 通过向堆栈命令添加附加参数

解决了该问题
  

-从不解析图像

所以现在,我的堆栈部署看起来像这样

docker stack deploy --compose-file docker-compose.yml --resolve-image never home

答案 2 :(得分:0)

如果您可以直接在pi上运行映像,那么您肯定已经针对正确的体系结构对其进行了编译。如果无法使用docker swarm运行,请尝试重新创建堆栈。

我不小心将一个x86图像拖到pi,即使从注册表中下载了一个新的与手臂兼容的图像,我仍然得到:

no suitable node (unsupported platform on 3 nodes)

在码头上进行码头工人检查时,我会看到以下信息:

"Architecture": "amd64",
"OS": "linux"

重新创建堆栈后,它可以正确启动。 Docker在堆栈上进行检查不再具有任何体系结构指示。