总结:在树莓派、Linux debian 上,当我尝试使用 jenkins 代理映像“jenkins/agent:jdk11”时,它工作正常。但如果我尝试从 dockerhub 中提取自己的映像(字面意思相同),它会给我错误“java.io.IOException:容器未运行。”
更详细的问题:我尝试学习詹金斯。我在带有 Linux debian 的树莓派上的 docker 容器中使用 jenkins master,并尝试使用与 socat do docker daemon 连接的 jenkins 代理。
当它工作时:如果我使用官方docker镜像jenkins/agent:jdk11,我可以制作hello world。
问题出在哪里:我需要我自己的带有c++工具的图像。首先,我构建最简单的、使用 dockerfile 创建的图像,无需工具:
FROM jenkins/agent:jdk11
USER jenkins
但是现在我在 jenkins 中遇到了问题,因为当我尝试使用 dockerhub 中的图像构建简单的自由式项目时,出现错误:
java.io.IOException: Container is not running.
at io.jenkins.docker.connector.DockerComputerConnector.createLauncher(DockerComputerConnector.java:195)
at com.nirima.jenkins.plugins.docker.DockerTemplate.doProvisionNode(DockerTemplate.java:754)
at com.nirima.jenkins.plugins.docker.DockerTemplate.provisionNode(DockerTemplate.java:682)
at com.nirima.jenkins.plugins.docker.DockerCloud$1.run(DockerCloud.java:414)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.java:28)
at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:68)
at jenkins.util.ErrorLoggingExecutorService.lambda$wrap$0(ErrorLoggingExecutorService.java:51)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
我尝试过的:当我在 Windows 电脑上以相同的方法使用 jenkins 时,一切正常。我可以打个招呼,世界。但我需要Linux。
我不知道问题出在哪里。 有什么建议吗?
解决方案: 在 dockerhub 上,写到我在 linux mint 上构建的镜像具有 ARM64 架构。 但是当我尝试在我的树莓派上使用 Linux 运行这个图像时,我收到了错误:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
当我构建新映像时,使用 ARM64 它可以工作:
docker buildx build --platform linux/arm64 -t your-dockerhub-username/yourimagename:yourtag .