在这种情况下`docker commit`的替代品?

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

我正在尝试构建一个 Docker 映像(基于

debian:latest
)以进行交叉编译。此过程中的一个步骤是创建交叉编译 sysroot,其中涉及在运行的容器中运行以下命令

mk-sbuild \
  --name=rpi3b-bookworm \
  --arch=arm64 \
  --debootstrap-mirror="http://ftp.debian.org/debian" \
  --skip-proposed --skip-updates --skip-security \
  bookworm

但是,此命令仅在容器以

docker run --priviledged
启动时才有效(因为它需要
chroot
等等)。好像没办法把这个flag传递给
docker build

运行

docker commit
后,除了
mk-sbuild
之外,我还有哪些选项可以保存图像?我听说不鼓励使用
docker commit
。有没有办法在 Dockerfile 中运行这个命令?

docker dockerfile cross-compiling docker-build
1个回答
0
投票

事实证明

debootstrap
是制作交叉编译sysroot更合适的工具。不同之处在于,如果无法在 chroot 内挂载
mk-sbuild
/proc
将会失败,而
debootstrap
只是发出警告。

作为参考,这是我最终得到的完整 Dockerfile:

FROM mcr.microsoft.com/devcontainers/cpp:debian-12

ARG sysroot_path=/home/vscode/rpi3b-bookworm-arm64

# Make apt non-interactive (or else the build might hang)
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        file neovim \
        clangd clang-format \
        debootstrap \
        gcc-aarch64-linux-gnu \
        g++-aarch64-linux-gnu \
        gfortran-aarch64-linux-gnu \
        qemu-user-static

# Use debootstrap to make the sysroot
RUN debootstrap --arch=arm64 --foreign bookworm \
    "$sysroot_path" "http://deb.debian.org/debian"

# Due to the foreign architecture, the 2nd-stage has to be run separately
RUN chroot "$sysroot_path" \
    /debootstrap/debootstrap --second-stage

# Install more packages
RUN chroot "$sysroot_path" \
    apt install -y --no-install-recommends \
        libgpiod-dev \
        libfmt-dev libfmt-doc libfmt9
© www.soinside.com 2019 - 2024. All rights reserved.