如何在基于 ARM 的 Mac 上运行 Cenos7 docker 镜像

问题描述 投票:0回答:2

我正在尝试创建一个

Dockerfile
来运行 CentOS。需要运行此容器的主机系统之一是基于 ARM 的 (m1) Mac。这是我迄今为止创建的两个文件。

# Dockerfile
FROM centos:7
# docker-compose.yml
version: "3.9"

services:
  genesis:
    build: .

当尝试运行/构建这个硬币容器时,我收到以下错误

Building genesis
[+] Building 0.9s (4/4) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                                                                                 0.0s
 => => transferring dockerfile: 77B                                                                                                                                                                                                                                                  0.0s
 => [internal] load .dockerignore                                                                                                                                                                                                                                                    0.0s
 => => transferring context: 2B                                                                                                                                                                                                                                                      0.0s
 => ERROR [internal] load metadata for docker.io/library/centos:7                                                                                                                                                                                                                    0.8s
 => [auth] library/centos:pull token for registry-1.docker.io                                                                                                                                                                                                                        0.0s
------
 > [internal] load metadata for docker.io/library/centos:7:
------
failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch oauth token: Get "https://auth.docker.io/token?scope=repository%3Alibrary%2Fcentos%3Apull&service=registry.docker.io": read tcp 192.168.1.209:64469->3.228.155.36:443: read: software caused connection abort
ERROR: Service 'genesis' failed to build : Build failed

经过一些谷歌搜索和有关堆栈溢出的答案后,看起来问题与容器和主机之间的架构差异有关。我尝试将 dockerfile 设置为

FROM --platform=aarch/arm centos:7

FROM --platform=linux/amd64 centos:7

但是这些都不起作用,并且它们返回与以前相同的错误。我也尝试过在 docker-compose 文件中指定

platform
,但这也不起作用。

有趣的是,当我在 shell 中使用该命令时,它似乎确实有效

$ docker run --rm -it --platform=linux/amd64 centos:7 sh

但我需要让它在 dockerfile 中工作,因为我需要在 Dockerfile 中进行更多设置

docker macos docker-compose dockerfile arm
2个回答
0
投票

Docker 不是虚拟机,因此有一些限制。

您的应用程序适用于 Linux,但您似乎正在尝试从 macOS 运行它?

您的 FROM 行是否指定了 Linux 版本?

如果是这样,您需要构建一个新的 macOS 本机二进制文件容器,并避免在 FROM 行中使用 Linux 容器。


0
投票

在寻找其他内容时遇到您的问题,但您可以尝试以下操作(当您编写问题时这可能不可用):

在 Mac 版 docker 中,转到设置 --> 开发中的功能,然后启用“使用 Rosetta ...”设置。

Docker Setting

这在设置开发容器时对我有用(我需要 Linux 映像的另一个用例)

© www.soinside.com 2019 - 2024. All rights reserved.