镜像构建历史
# 2026-01-19 00:38:50 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/run.sh"]
# 2026-01-19 00:38:50 0.00B 添加元数据标签
LABEL io.hass.name=Music Assistant (Customizable) io.hass.description=Official Music Assistant with support for loading custom plugins from /share. io.hass.type=addon io.hass.version=2.0.0
# 2026-01-19 00:38:50 1.37KB 执行命令并创建新的镜像层
RUN /bin/sh -c chmod +x /run.sh # buildkit
# 2026-01-19 00:38:49 1.37KB 复制新文件或目录到容器中
COPY run.sh /run.sh # buildkit
# 2026-01-17 18:02:54 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/entrypoint.sh" "--data-dir" "/data" "--cache-dir" "/data/.cache"]
# 2026-01-17 18:02:54 131.00B 执行命令并创建新的镜像层
RUN |2 MASS_VERSION=2.7.5 TARGETPLATFORM=linux/arm64 /bin/sh -c printf '#!/bin/sh\nfor path in /usr/lib/*/libjemalloc.so.2; do\n [ -f "$path" ] && export LD_PRELOAD="$path" && break\ndone\nexec mass "$@"\n' > /usr/local/bin/entrypoint.sh && chmod +x /usr/local/bin/entrypoint.sh # buildkit
# 2026-01-17 18:02:54 0.00B 设置工作目录为/app/venv
WORKDIR /app/venv
# 2026-01-17 18:02:54 0.00B 声明容器运行时监听的端口
EXPOSE [8095/tcp]
# 2026-01-17 18:02:54 0.00B 创建挂载点用于持久化数据或共享数据
VOLUME [/data]
# 2026-01-17 18:02:54 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=Music Assistant Server org.opencontainers.image.description=Music Assistant is a free, opensource Media library manager that connects to your streaming services and a wide range of connected speakers. The server is the beating heart, the core of Music Assistant and must run on an always-on device like a Raspberry Pi, a NAS or an Intel NUC or alike. org.opencontainers.image.source=https://github.com/music-assistant/server org.opencontainers.image.authors=The Music Assistant Team org.opencontainers.image.documentation=https://music-assistant.io org.opencontainers.image.licenses=Apache License 2.0 io.hass.version=2.7.5 io.hass.type=addon io.hass.name=Music Assistant Server io.hass.description=Music Assistant Server io.hass.platform=linux/arm64 io.hass.type=addon
# 2026-01-17 18:02:54 0.00B 定义构建参数
ARG TARGETPLATFORM=linux/arm64
# 2026-01-17 18:02:54 0.00B 定义构建参数
ARG MASS_VERSION=2.7.5
# 2026-01-17 18:02:54 0.00B 执行命令并创建新的镜像层
RUN /bin/sh -c chmod 777 /app # buildkit
# 2026-01-17 18:02:54 857.43MB 复制新文件或目录到容器中
COPY /app /app # buildkit
# 2026-01-17 18:02:54 0.00B 设置环境变量 PATH
ENV PATH=/app/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-01-17 18:02:54 0.00B 设置环境变量 VIRTUAL_ENV
ENV VIRTUAL_ENV=/app/venv
# 2026-01-13 16:40:10 0.00B 添加元数据标签
LABEL org.opencontainers.image.title=Music Assistant Base Image org.opencontainers.image.description=Base Image for Music Assistant server - not to be used directly org.opencontainers.image.source=https://github.com/music-assistant/server org.opencontainers.image.authors=The Music Assistant Team org.opencontainers.image.licenses=Apache License 2.0
# 2026-01-13 16:40:10 0.00B 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=arm64 /bin/sh -c chmod -R 777 /tmp # buildkit
# 2026-01-13 16:40:09 3.46KB 复制新文件或目录到容器中
COPY widevine_cdm/* /usr/local/bin/widevine_cdm/ # buildkit
# 2026-01-13 16:40:09 0.00B 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=arm64 /bin/sh -c mkdir -p /usr/local/bin/widevine_cdm # buildkit
# 2026-01-13 16:40:09 37.97KB 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=arm64 /bin/sh -c ldconfig && ffmpeg -version && ffprobe -version # buildkit
# 2026-01-13 16:40:09 8.78MB 复制新文件或目录到容器中
COPY /wheels/ /usr/local/share/pyav-wheels/ # buildkit
# 2026-01-13 16:17:48 203.09KB 复制新文件或目录到容器中
COPY /usr/local/lib/libpostproc.so* /usr/local/lib/ # buildkit
# 2026-01-13 16:17:48 1.78MB 复制新文件或目录到容器中
COPY /usr/local/lib/libsw*.so* /usr/local/lib/ # buildkit
# 2026-01-13 16:17:48 60.45MB 复制新文件或目录到容器中
COPY /usr/local/lib/libav*.so* /usr/local/lib/ # buildkit
# 2026-01-13 16:17:48 208.30KB 复制新文件或目录到容器中
COPY /usr/local/bin/ffprobe /usr/local/bin/ # buildkit
# 2026-01-13 16:17:47 333.31KB 复制新文件或目录到容器中
COPY /usr/local/bin/ffmpeg /usr/local/bin/ # buildkit
# 2026-01-13 14:55:19 8.24MB 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=arm64 /bin/sh -c set -x && if [ "$TARGETARCH" = "arm64" ]; then SNAPCAST_ARCH="arm64"; else SNAPCAST_ARCH="amd64"; fi && wget -q "https://github.com/badaix/snapcast/releases/download/v${SNAPCAST_VERSION}/snapserver_${SNAPCAST_VERSION}-1_${SNAPCAST_ARCH}_bookworm.deb" -O /tmp/snapserver.deb && wget -q "https://github.com/badaix/snapcast/releases/download/v${SNAPCAST_VERSION}/snapclient_${SNAPCAST_VERSION}-1_${SNAPCAST_ARCH}_bookworm.deb" -O /tmp/snapclient.deb && dpkg -i /tmp/snapserver.deb /tmp/snapclient.deb && rm /tmp/snapserver.deb /tmp/snapclient.deb # buildkit
# 2026-01-13 14:55:19 0.00B 定义构建参数
ARG TARGETARCH=arm64
# 2026-01-13 14:55:19 0.00B 定义构建参数
ARG SNAPCAST_VERSION=0.34.0
# 2026-01-13 14:55:01 279.18MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -x && apt-get update && apt-get install -y --no-install-recommends ca-certificates libjemalloc2 tzdata wget cifs-utils libnfs13 openssl libssl-dev libuuid1 libcurl4 libsodium23 libconfuse2 libunistring2 libxml2 libevent-dev libjson-c5 libplist3 libgcrypt20 libavfilter8 libsndfile1 libfdk-aac2 libmp3lame0 libopus0 libvorbis0a libvorbisenc2 libsoxr0 libspeex1 libtwolame0 libshine3 libopencore-amrnb0 libopencore-amrwb0 libvo-amrwbenc0 librubberband2 libbs2b0 libsamplerate0 libmysofa1 libjack-jackd2-0 libpulse0 libbluray2 libxml2 libssh-4 liblzma5 libasound2 libvorbisidec1 libflac12 libavahi-client3 libavahi-common3 libconfig9 libpopt0 && apt-get clean && rm -rf /var/lib/apt/lists/* # buildkit
# 2026-01-13 14:50:02 272.00B 执行命令并创建新的镜像层
RUN /bin/sh -c echo "deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && echo "deb http://deb.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware" >> /etc/apt/sources.list && echo "deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list # buildkit
# 2025-12-30 08:49:20 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2025-12-30 08:49:20 36.00B 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; for src in idle3 pip3 pydoc3 python3 python3-config; do dst="$(echo "$src" | tr -d 3)"; [ -s "/usr/local/bin/$src" ]; [ ! -e "/usr/local/bin/$dst" ]; ln -svT "$src" "/usr/local/bin/$dst"; done # buildkit
# 2025-12-30 08:49:20 39.59MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends dpkg-dev gcc gnupg libbluetooth-dev libbz2-dev libc6-dev libdb-dev libffi-dev libgdbm-dev liblzma-dev libncursesw5-dev libreadline-dev libsqlite3-dev libssl-dev make tk-dev uuid-dev wget xz-utils zlib1g-dev ; wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz"; echo "$PYTHON_SHA256 *python.tar.xz" | sha256sum -c -; wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc"; GNUPGHOME="$(mktemp -d)"; export GNUPGHOME; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$GPG_KEY"; gpg --batch --verify python.tar.xz.asc python.tar.xz; gpgconf --kill all; rm -rf "$GNUPGHOME" python.tar.xz.asc; mkdir -p /usr/src/python; tar --extract --directory /usr/src/python --strip-components=1 --file python.tar.xz; rm python.tar.xz; cd /usr/src/python; gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)"; ./configure --build="$gnuArch" --enable-loadable-sqlite-extensions --enable-optimizations --enable-option-checking=fatal --enable-shared $(test "${gnuArch%%-*}" != 'riscv64' && echo '--with-lto') --with-ensurepip ; nproc="$(nproc)"; EXTRA_CFLAGS="$(dpkg-buildflags --get CFLAGS)"; LDFLAGS="$(dpkg-buildflags --get LDFLAGS)"; LDFLAGS="${LDFLAGS:--Wl},--strip-all"; arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; case "$arch" in amd64|arm64) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"; ;; i386) ;; *) EXTRA_CFLAGS="${EXTRA_CFLAGS:-} -fno-omit-frame-pointer"; ;; esac; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:-}" ; rm python; make -j "$nproc" "EXTRA_CFLAGS=${EXTRA_CFLAGS:-}" "LDFLAGS=${LDFLAGS:--Wl},-rpath='\$\$ORIGIN/../lib'" python ; make install; cd /; rm -rf /usr/src/python; find /usr/local -depth \( \( -type d -a \( -name test -o -name tests -o -name idle_test \) \) -o \( -type f -a \( -name '*.pyc' -o -name '*.pyo' -o -name 'libpython*.a' \) \) \) -exec rm -rf '{}' + ; ldconfig; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark; find /usr/local -type f -executable -not \( -name '*tkinter*' \) -exec ldd '{}' ';' | awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' | sort -u | xargs -rt dpkg-query --search | awk 'sub(":$", "", $1) { print $1 }' | sort -u | xargs -r apt-mark manual ; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; export PYTHONDONTWRITEBYTECODE=1; python3 --version; pip3 --version # buildkit
# 2025-12-30 08:36:47 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=16ede7bb7cdbfa895d11b0642fa0e523f291e6487194d53cf6d3b338c3a17ea2
# 2025-12-30 08:36:47 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.13.11
# 2025-12-30 08:36:47 0.00B 设置环境变量 GPG_KEY
ENV GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305
# 2025-12-30 08:36:47 9.25MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; apt-get update; apt-get install -y --no-install-recommends ca-certificates netbase tzdata ; rm -rf /var/lib/apt/lists/* # buildkit
# 2025-12-30 08:36:47 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2025-12-29 08:00:00 97.20MB
# debian.sh --arch 'arm64' out/ 'bookworm' '@1766966400'
镜像信息
{
"Id": "sha256:31509e3158c13517e97e73102eae1034ffdad571f35bf44d15c21580441400f4",
"RepoTags": [
"ghcr.io/neqq3/ma-custom-loader:latest",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/neqq3/ma-custom-loader:latest-linuxarm64"
],
"RepoDigests": [
"ghcr.io/neqq3/ma-custom-loader@sha256:8a05ee941ac1e956afa7213ee2e15b8e0df4a79222013efed61cd002504a081b",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/neqq3/ma-custom-loader@sha256:35a5fddd9b331546fa1c292c9ee59333f23f3f570517bcc8ba051b32168ee086"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-01-18T16:38:50.091079078Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8095/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/app/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GPG_KEY=7169605F62C751356D054A26A821E680E5FA6305",
"PYTHON_VERSION=3.13.11",
"PYTHON_SHA256=16ede7bb7cdbfa895d11b0642fa0e523f291e6487194d53cf6d3b338c3a17ea2",
"VIRTUAL_ENV=/app/venv"
],
"Cmd": null,
"Image": "",
"Volumes": {
"/data": {}
},
"WorkingDir": "/app/venv",
"Entrypoint": [
"/run.sh"
],
"OnBuild": null,
"Labels": {
"io.hass.description": "Official Music Assistant with support for loading custom plugins from /share.",
"io.hass.name": "Music Assistant (Customizable)",
"io.hass.platform": "linux/arm64",
"io.hass.type": "addon",
"io.hass.version": "2.0.0",
"org.opencontainers.image.authors": "The Music Assistant Team",
"org.opencontainers.image.description": "Music Assistant is a free, opensource Media library manager that connects to your streaming services and a wide range of connected speakers. The server is the beating heart, the core of Music Assistant and must run on an always-on device like a Raspberry Pi, a NAS or an Intel NUC or alike.",
"org.opencontainers.image.documentation": "https://music-assistant.io",
"org.opencontainers.image.licenses": "Apache License 2.0",
"org.opencontainers.image.source": "https://github.com/music-assistant/server",
"org.opencontainers.image.title": "Music Assistant Server"
}
},
"Architecture": "arm64",
"Os": "linux",
"Size": 1362703577,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/f627022ca53986ed8bd5716581370f3fdf1dc1de0ca56a04aa5e886c0b6d0969/diff:/var/lib/docker/overlay2/3924e7f9058c5880446df038834583fdc0050368c2ed66246dd172923adc38cd/diff:/var/lib/docker/overlay2/b3cbe558616314acf1edbffa82543ae4ab8fc41d87e69aa231b6aa3530d48b0a/diff:/var/lib/docker/overlay2/3cd6c7378cbff17d1a3a5252824d84659866c0c2df8badb8834efe7eb2e15af9/diff:/var/lib/docker/overlay2/7aef4c03aff9575319e12bf80c4c847cfe5a6fd36d72b80f000fb9aa8d1f3c81/diff:/var/lib/docker/overlay2/28a21716c16543583d227dda4e57d8fc0f9f93c1094d581f3398197f44b70e97/diff:/var/lib/docker/overlay2/d47fb4e4aa36a8925c410adac9c5ce64d9d485fc6fb6945cb75de8f832f62a9d/diff:/var/lib/docker/overlay2/fda65d595098b983122cc86322999241b11c133e4236a4f57e2678e99408361e/diff:/var/lib/docker/overlay2/3d02fb9b990613f6fd256f013a9bcaa5d8dea42667acd31c4c4fced8a783cee6/diff:/var/lib/docker/overlay2/44b8b37198a7113fcbfcc876cd2e0d3c14133c3c2b84b3a12045bb7fadf8c166/diff:/var/lib/docker/overlay2/e0e15ded2a72f6d5164a1a3fb8361094e63e6f7c677a03fbbd2c4fb86d451a76/diff:/var/lib/docker/overlay2/3f6527c6d81fb3ab1f2f09849480343dd01f5da73c46f59f36a06cb63e655ca0/diff:/var/lib/docker/overlay2/e53435aa5adb5ab551de81bcbed5ef9caad91e06730861527c7a756198ffd1dc/diff:/var/lib/docker/overlay2/d044bf72d63bfac4161a562d00397f7e32c8689aae09fd282cec1ca58eeb34dc/diff:/var/lib/docker/overlay2/fc36b69fc314f982c750c79ec0080119394ff44cda0124b5ae875558c84ca4ed/diff:/var/lib/docker/overlay2/20d7cbd84c90a7d1a5094b0f10d040c478c3c7a33358ac6d3578a047cd6ef906/diff:/var/lib/docker/overlay2/0a76337300bb1137c1b4032a14c1085a3c2afea544224d1255af7f4fc2200699/diff:/var/lib/docker/overlay2/12d978e9b85a1066d40cf6712e5867e33d13cacaa4e107b4db3abe692692dd32/diff:/var/lib/docker/overlay2/f955346d505c7480d71f0d03f3bf3a18462e4aa9de1fbc91c091c0d013842713/diff:/var/lib/docker/overlay2/563bf43e8861f36fe978e420d674e7a6cb3f36645bc3267cb5bbce343635f586/diff:/var/lib/docker/overlay2/c032b8819b3227e40fedfc120487ee627673ee547e9b722a50429f8e989eb75b/diff:/var/lib/docker/overlay2/211c72a73f3c5251f2fdb1e1401cf18306c62fc49c3b97da24e0e8f31db03f39/diff",
"MergedDir": "/var/lib/docker/overlay2/8bba2dba74b17e2600771f485499a2d8ab7a9fc1c50245124a3c6743cf3cf761/merged",
"UpperDir": "/var/lib/docker/overlay2/8bba2dba74b17e2600771f485499a2d8ab7a9fc1c50245124a3c6743cf3cf761/diff",
"WorkDir": "/var/lib/docker/overlay2/8bba2dba74b17e2600771f485499a2d8ab7a9fc1c50245124a3c6743cf3cf761/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:a213e65854731d0d22af89cbe6416caa5f8d0d3f98a9246962a2f319190a4757",
"sha256:97b185c1f1a319c2ec8d9778c275cce3f33dea5703032ecf814cf1f51fb06f66",
"sha256:45cfacbf873faf0853a30ec249a516ed960cf675790c112f2f1de2375133eae2",
"sha256:39888ee4e4b953e4734c8936a7698eda3852320856812c6ff8753100434ebffb",
"sha256:a9d8ca72e49f4741238ab1584d813e8d3209a775f40637df0881668d82295007",
"sha256:352071480745e2b20ca115d2ae6ff96a441300069d450e3cc611df0fe251ff96",
"sha256:1d9721088e020d77e599a092f6832d23a8788106ea585c043c7ed1543e3fa5cd",
"sha256:aa8a9903cd9ac81726a17bc245c8aee759a12a88fb22d95ec483e50a090149bf",
"sha256:0c28fbecd5803e78b8c0d1ebb2af153807f4b9114dbde8bf5997be8756a80d86",
"sha256:c1b79f52d893e3c015eafa4af28c6f9e042e398290683bc2263c2a04231e3359",
"sha256:44a3364ad8f7acb66a36ddea7382fc826b0db53d4223c0cb8ba5a04b1d445b7a",
"sha256:49c9fad5f97fda00a4a0561350b8662b3d80316b5163c8933b8fe5cad3d7d9a4",
"sha256:28672db6725a39282640f04823822221b9989b1f1621d8549c7b3d8eb1d7e112",
"sha256:4920be51ed4831a939f7b54eeab103a82f6cb745772bf469cc37d7e7e1ab4173",
"sha256:81ccd27dc8de79a7d4b058dd848fc6871fef1f0c1c94716a7d603ba1170742c2",
"sha256:e4e97bd1629aaaaf597c5eafdf19457afd4755b602147484ed7bbeb7fde586f5",
"sha256:436fab300095d0c0b35bf0c236feddd2d24e332af11b55cbb0c7e78b45876599",
"sha256:107e875f391fc1b18bfc04737f6914240c7cc78797b432032d163be7c3f20f93",
"sha256:bb202c71cc6e6783bb30ba44fa40699214307a2054b57668cd329466a01b4ab7",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:95c469da3096dbf4d603482b01435bcd728207ea412718bf92010352ef363417",
"sha256:871afdd0cb64900b4a17c4c2fe21f9ea307135df9ef6756d291e15839009c9dc",
"sha256:4979f22936615ed78a107529ef70855997a53785b53c75a2026f660f6fdde2ce"
]
},
"Metadata": {
"LastTagTime": "2026-08-28T09:22:20.607316556+08:00"
}
}