我有一个基于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服务来使用图像?
答案 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在堆栈上进行检查不再具有任何体系结构指示。