Docker 在 M1 Mac arm64架构上构建 amd64镜像。

问题描述:通过在Mac M1电脑上构建的镜像,在linux x86的服务器上运行不起来,因为编译原理不一样。

构建好的镜像ID,通过docker inspect命令可以查看镜像的架构;

如下,同样的服务,构建出来的镜像架构确实不一样的。

[root@one-01 ~]# docker inspect 150b12879d3b | grep Architecture
        "Architecture": "arm64",
[root@one-01 ~]# 
[root@one-01 ~]# docker inspect 3ca177c70621 | grep Architecture
        "Architecture": "amd64",
[root@one-01 ~]# 

构建arm64使用的Dockerdile

FROM openjdk:8
RUN apt install tzdata && \
    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ARG NAME
ARG FILE_URL

ENV APP_NAME=${NAME}
ENV PROFILE=ca
ENV PORT=8080

ADD ${FILE_URL} app.jar


ENTRYPOINT java -jar -Dspring.profiles.active=${PROFILE} -Dserver.port=${PORT} -Duser.timezone=Asia/Shanghai /app.jar

构建amd64使用的镜像

FROM anapsix/alpine-java:8_server-jre_unlimited

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


ARG NAME
ARG FILE_URL

ENV APP_NAME=${NAME}
ENV PROFILE=caiicloud
ENV PORT=8080

ADD ${FILE_URL} app.jar

ENTRYPOINT java -jar -Dspring.profiles.active=${PROFILE} -Dserver.port=${PORT} -Duser.timezone=Asia/Shanghai /app.jar

分析一下可能是因为Dockerfile.

如果你也是Java镜像可以按照我的方式替换一下源镜像文件,如果是其他镜像,可以找一下适配amd64的源镜像文件。

我重新使用amd64的dockerfile构建了一下,查看到一个warning

---> [Warning] The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested

意思就是,请求的镜像是amd64的,在arm64上面构建不适配,但也是可以构建成功的。

运行的时候需要加一个--platform linux/amd64参数

下面是Docker官网的解释

另外Docker通过buildx. 集成了Moby BuildKit工具包的 CLI 插件。这允许您为各种不同的 CPU 架构构建 Docker 映像,并且它在后台使用 QEMU 进行仿真。

可以通过命令查看支持的编译类型

docker buildx ls

 

相关链接推荐:How to build x86 (and others!) Docker images on an M1 Mac – Jaimyn's Blog

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在 Docker 上安装 Windows ARM64 镜像,需要满足以下条件: 1. 你的计算机必须支持 ARM64 架构,并且已经安装了 Docker。 2. 你需要下载 Windows ARM64 镜像,可以在 Microsoft 官网或者其他网站上获取。 3. 运行命令 `docker load -i <image_name>.tar` 将镜像加载到 Docker 中。 4. 运行命令 `docker run -it --name <container_name> <image_name>` 启动容器。 如果你想要在容器中运行 Windows 应用程序,可以使用命令 `docker exec -it <container_name> cmd` 进入容器的命令行界面,然后使用 `start <app_name>` 命令运行应用程序。 ### 回答2: 在Docker上安装Windows arm64镜像是可能的。但是需要注意的是,目前在Docker Hub上并没有提供官方的Windows arm64镜像。不过,我们可以通过一些非官方的方法来实现。 首先,你需要一个运行Windows Server的arm64设备,例如Raspberry Pi 3 Model B+。然后,你可以按照以下步骤进行安装: 1. 首先,确保你的设备已经安装了Docker,并且已成功启动。 2. 在你的设备上下载Windows arm64镜像,可以通过一些第三方网站或社区提供的资源来获取。 3. 将下载的镜像导入到Docker中。你可以使用以下命令将镜像导入到Docker中: `docker load -i <path_to_image_file>` 4. 查看导入的镜像列表,使用以下命令: `docker images` 5. 运行安装好的Windows arm64镜像,使用以下命令: `docker run -it <image_name>` 请注意,这些步骤仅仅是一种可能的解决方案,没有官方支持,并且可能存在一些限制和问题。此外,非官方的镜像可能不会得到官方的更新和维护。因此,在安装和使用非官方的镜像时需要谨慎,并且最好在安全的环境下进行测试和实验。 ### 回答3: 在Docker上安装Windows amdx64镜像的步骤如下: 1. 首先,确保安装了Docker工具。Docker可以在Windows上运行,您可以从Docker官方网站上下载并安装适用于Windows的Docker Desktop。 2. 接下来,您需要获取Windows amdx64镜像。Windows amdx64镜像通常可从官方的Microsoft Docker Hub仓库中获取。您可以在Docker Hub上搜索并下载所需的Windows amdx64镜像。 3. 下载镜像后,打开Docker Desktop应用程序并登录到您的Docker帐户。然后,在Docker应用程序中转到“镜像”或“images”选项卡。 4. 在“镜像”选项卡中,您将看到已下载的镜像的列表。将鼠标悬停在所需的镜像上,然后单击“运行”或类似的选项。 5. 接下来,为容器选择正确的配置。您可以指定容器的名称、端口映射、卷挂载等选项。确保将端口映射和卷挂载正确设置,以满足您的需求。 6. 最后,单击“运行”或类似的选项,Docker将下载并启动您选择的Windows amdx64镜像。 需要注意的是,安装Windows amdx64镜像的过程可能会因您使用的Docker版本和操作系统版本而异。因此,在操作过程中,您可能需要参考相关的Docker和Windows文档以获取详细的步骤和指南。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安逸的程序猿

意思不意思那是你的意思我没意思

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值