ふくしま

ソフトウェアエンジニア

M1 Macbookでcompilerbookをやっていたらno matching manifest for linux/arm64/v8 in the manifest list entriesが起きた話

概要

以前、低レイヤを知りたい人のためのCコンパイラ作成入門をやっていたら、M1起因によるエラーが出たので以下の記事で解決したのだが、久しぶりにDev Containerで開いてみたら違うエラーが起きたのでもうダメかもしれないっていう話。追記: 一応解決できた。追記に解決策を書く

justylifememo.hatenablog.com

問題

そもそもDockerコンテナを立ち上げようとしたら以下のエラーが起きた。

Error fetching image details: No manifest found for docker.io/amd64/ubuntu:latest.
Start: Run: docker pull amd64/ubuntu:latest
latest: Pulling from amd64/ubuntu
no matching manifest for linux/arm64/v8 in the manifest list entries
Stop (2458 ms): Run: docker pull amd64/ubuntu:latest
[]
Error response from daemon: No such image: amd64/ubuntu:latest

あっれー?前はいけてたのになと思っているとno matching manifest for linux/arm64/v8 in the manifest list entries とある。

解決できない

解決策あるのかな。思いつかない。前は抜け道的にAMDのUbuntuイメージを使ってIntelのCPUアーキテクチャを使用していた。 でもARM用のアーキテクチャのイメージしか使えないとなると、DockerではIntel系のCPUアーキテクチャは使えないのかな。

試しに FROM arm64v8/ubuntu:latest に書き換えたらIntelのsyntaxが使えなくなった。どうしたもんか。。。

tmp.s: Assembler messages:
tmp.s:1: Error: unknown pseudo-op: `.intel_syntax'
tmp.s:4: Error: expected a register or register list at operand 1 -- `mov rax,123'

追記: 解決策

platformのコマンドを追加したらいけた。自分はdocker-composeに platform: linux/amd64 を追加した。

Dockerfile

FROM ubuntu:latest
RUN apt update
RUN DEBIAN_FRONTEND=noninteractive apt install -y gcc make git binutils libc6-dev gdb sudo
RUN adduser --disabled-password --gecos '' user
RUN echo 'user ALL=(root) NOPASSWD:ALL' > /etc/sudoers.d/user
USER user
WORKDIR /home/user

docker-compose.yml

version: '3'
services:
    compilerbook:
        platform: linux/amd64
        volumes:
            - '$HOME/dev/9cc:/9cc'
        build:
            context: .
            dockerfile: Dockerfile