镜像构建历史
# 2026-06-11 02:45:42 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["/usr/local/bin/entrypoint.sh" "--data-dir" "/data" "--cache-dir" "/data/.cache"]
# 2026-06-11 02:45:42 131.00B 执行命令并创建新的镜像层
RUN |2 MASS_VERSION=2.9.0rc7 TARGETPLATFORM=linux/amd64 /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-06-11 02:45:42 0.00B 设置工作目录为/app/venv
WORKDIR /app/venv
# 2026-06-11 02:45:42 0.00B 声明容器运行时监听的端口
EXPOSE [8095/tcp]
# 2026-06-11 02:45:42 0.00B 创建挂载点用于持久化数据或共享数据
VOLUME [/data]
# 2026-06-11 02:45:42 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.9.0rc7 io.hass.type=addon io.hass.name=Music Assistant Server io.hass.description=Music Assistant Server io.hass.platform=linux/amd64 io.hass.type=addon
# 2026-06-11 02:45:42 0.00B 定义构建参数
ARG TARGETPLATFORM=linux/amd64
# 2026-06-11 02:45:42 0.00B 定义构建参数
ARG MASS_VERSION=2.9.0rc7
# 2026-06-11 02:45:42 0.00B 执行命令并创建新的镜像层
RUN /bin/sh -c chmod 777 /app # buildkit
# 2026-06-11 02:45:41 1.87GB 复制新文件或目录到容器中
COPY /app /app # buildkit
# 2026-06-11 02:45:41 0.00B 设置环境变量 PATH
ENV PATH=/app/venv/bin:/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-06-11 02:45:41 0.00B 设置环境变量 VIRTUAL_ENV
ENV VIRTUAL_ENV=/app/venv
# 2026-05-26 21:01:41 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-05-26 21:01:41 0.00B 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=amd64 /bin/sh -c chmod -R 777 /tmp # buildkit
# 2026-05-26 21:01:40 3.46KB 复制新文件或目录到容器中
COPY widevine_cdm/* /usr/local/bin/widevine_cdm/ # buildkit
# 2026-05-26 21:01:40 0.00B 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=amd64 /bin/sh -c mkdir -p /usr/local/bin/widevine_cdm # buildkit
# 2026-05-26 21:01:40 39.08KB 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=amd64 /bin/sh -c ldconfig && ffmpeg -version && ffprobe -version # buildkit
# 2026-05-26 21:01:40 8.97MB 复制新文件或目录到容器中
COPY /wheels/ /usr/local/share/pyav-wheels/ # buildkit
# 2026-05-26 20:59:44 215.52KB 复制新文件或目录到容器中
COPY /usr/local/lib/libpostproc.so* /usr/local/lib/ # buildkit
# 2026-05-26 20:59:44 2.20MB 复制新文件或目录到容器中
COPY /usr/local/lib/libsw*.so* /usr/local/lib/ # buildkit
# 2026-05-26 20:59:44 69.45MB 复制新文件或目录到容器中
COPY /usr/local/lib/libav*.so* /usr/local/lib/ # buildkit
# 2026-05-26 20:59:44 191.90KB 复制新文件或目录到容器中
COPY /usr/local/bin/ffprobe /usr/local/bin/ # buildkit
# 2026-05-26 20:59:44 345.58KB 复制新文件或目录到容器中
COPY /usr/local/bin/ffmpeg /usr/local/bin/ # buildkit
# 2026-05-26 20:51:30 8.98MB 执行命令并创建新的镜像层
RUN |2 SNAPCAST_VERSION=0.34.0 TARGETARCH=amd64 /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-05-26 20:51:30 0.00B 定义构建参数
ARG TARGETARCH=amd64
# 2026-05-26 20:51:30 0.00B 定义构建参数
ARG SNAPCAST_VERSION=0.34.0
# 2026-05-26 20:51:26 342.19MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -x && apt-get update && apt-get install -y --no-install-recommends ca-certificates libjemalloc2 tzdata wget cifs-utils libnfs13 nfs-common openssl libssl-dev libuuid1 libcurl4 libsodium23 libconfuse2 libunistring2 libxml2 libevent-dev libjson-c5 libplist3 libgcrypt20 libavfilter8 libsndfile1 libchromaprint1 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 libportaudio2 pipewire-alsa pulseaudio-utils libvorbisidec1 libflac12 libavahi-client3 libavahi-common3 libconfig9 libpopt0 && apt-get clean && rm -rf /var/lib/apt/lists/* && rm -f /usr/bin/parecord /usr/bin/paplay /usr/bin/parec /usr/bin/pamon /usr/bin/pacat /usr/bin/pasuspender /usr/bin/pacmd # buildkit
# 2026-05-26 20:50:39 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
# 2026-05-20 07:52:25 0.00B 设置默认要执行的命令
CMD ["python3"]
# 2026-05-20 07:52:25 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
# 2026-05-20 07:52:24 38.04MB 执行命令并创建新的镜像层
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 libzstd-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 -; 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
# 2026-05-20 07:40:02 0.00B 设置环境变量 PYTHON_SHA256
ENV PYTHON_SHA256=7e32597b99e5d9a39abed35de4693fa169df3e5850d4c334337ffd6a19a36db6
# 2026-05-20 07:40:02 0.00B 设置环境变量 PYTHON_VERSION
ENV PYTHON_VERSION=3.14.5
# 2026-05-20 07:40:02 9.26MB 执行命令并创建新的镜像层
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
# 2026-05-20 07:40:02 0.00B 设置环境变量 PATH
ENV PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2026-05-18 08:00:00 74.83MB
# debian.sh --arch 'amd64' out/ 'bookworm' '@1779062400'
镜像信息
{
"Id": "sha256:7a600803721a11d30dbb947cb4276e931da9cb304df0b6ecfae48a71d6c49771",
"RepoTags": [
"ghcr.io/music-assistant/server:beta",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/music-assistant/server:beta"
],
"RepoDigests": [
"ghcr.io/music-assistant/server@sha256:22e702740acbc7f9294b62befe66cdb667f7c9a7037c34737e198ee5e31519a7",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/music-assistant/server@sha256:d434ab741accf449b4a8f29e0d0d9486b78607220d07acee7d32e23eb6faab39"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-06-10T18:45:42.197711868Z",
"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",
"PYTHON_VERSION=3.14.5",
"PYTHON_SHA256=7e32597b99e5d9a39abed35de4693fa169df3e5850d4c334337ffd6a19a36db6",
"VIRTUAL_ENV=/app/venv"
],
"Cmd": null,
"Image": "",
"Volumes": {
"/data": {}
},
"WorkingDir": "/app/venv",
"Entrypoint": [
"/usr/local/bin/entrypoint.sh",
"--data-dir",
"/data",
"--cache-dir",
"/data/.cache"
],
"OnBuild": null,
"Labels": {
"io.hass.description": "Music Assistant Server",
"io.hass.name": "Music Assistant Server",
"io.hass.platform": "linux/amd64",
"io.hass.type": "addon",
"io.hass.version": "2.9.0rc7",
"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": "amd64",
"Os": "linux",
"Size": 2425988467,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/63213a8c3cd18b065a26bf41f6817d85615a6889914048f44a15dab26e7b7551/diff:/var/lib/docker/overlay2/7a168e16101d8f932537161ba48e883645757aec932af13690be29b2fd2fd727/diff:/var/lib/docker/overlay2/6af4462d89102b9d568fe64ef1ef46534c81f992815cfe879f1040ffe48251c1/diff:/var/lib/docker/overlay2/078982904d372f6d9e6fd38c5c3e8e5f6e4f21565cd852ffb18d1f544d0a9b6b/diff:/var/lib/docker/overlay2/9d5854611649138d3d0e01189281fff6ab291f0fe6e8202b5136354069a1b7ca/diff:/var/lib/docker/overlay2/fadb8c8c7aa1525ae9a1c004346c41c32c227d284798e614328c2c76fce0de25/diff:/var/lib/docker/overlay2/32b0e54f2249252e9c6bb5150f89c69e397e7864a4557e21962226458c506d68/diff:/var/lib/docker/overlay2/22c073a5cc4a64a982af45792aa33f87be02968e5e2b72a7ddc7771e44642f06/diff:/var/lib/docker/overlay2/fd2e370f4b2f63091e81bf9f1943a71799a2b42c1f2dbb8d7b2b004d3fbcf404/diff:/var/lib/docker/overlay2/d9ab78be9068c172928ef38858eefe29ca1adb4df6588ad97ddf56d50c3bf58d/diff:/var/lib/docker/overlay2/70a3c1763613e9e2b9c497b6652c43f00f53e23a777e014a9d2adeba86963971/diff:/var/lib/docker/overlay2/23fe4d49b18c4d3fe756135aeae24d683378b03f60bad49c23376f10c0c147e7/diff:/var/lib/docker/overlay2/c933f29d4d315cd71d74f9b78e8f27c38e8802ac5785f3bc8e30a7a1375cc223/diff:/var/lib/docker/overlay2/15cfc2da916c08a30920806eba82d5130e2d032e78f71462e7dba10df6549855/diff:/var/lib/docker/overlay2/3a5c539d9742bf8c4a24a615706faba3517d8e64a6c87b7b04ab969aac03c756/diff:/var/lib/docker/overlay2/7703783a2b6d1d1eb1a40fc33a44f13a84eba24f5b68ea3f2b7beda9396e2f26/diff:/var/lib/docker/overlay2/f41368cfd513b205ab19175bbda88f74d36928c44f3ea6a1b4e9d50446f8e1b0/diff:/var/lib/docker/overlay2/ac2f6e45cfefce8bc4f9bf52f43258bb4935f9f2ffab0df394e23deda45e7c1f/diff:/var/lib/docker/overlay2/4b1a8f9bf6eaf8ba58dd1a34a80e14625563b36269aa23a64538b1e8b5179e18/diff:/var/lib/docker/overlay2/f31bfa56a7a89043b8b344f0b40dd25ed8ef40dde9d94740552e14f9bd2c73ab/diff",
"MergedDir": "/var/lib/docker/overlay2/c5e93f951e7743b6f60831a9fac8ff68d30ac9b51969155eee887ba0e0947e77/merged",
"UpperDir": "/var/lib/docker/overlay2/c5e93f951e7743b6f60831a9fac8ff68d30ac9b51969155eee887ba0e0947e77/diff",
"WorkDir": "/var/lib/docker/overlay2/c5e93f951e7743b6f60831a9fac8ff68d30ac9b51969155eee887ba0e0947e77/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:b2008ac19409fa6fee4b52596271400498aebd0be04dffac5351bd1dcf230f2a",
"sha256:312028695cc18fa0e4922377836b5e2175e33ab9a177b0e68d4655b654d830e0",
"sha256:572e54b7dce0fb3e6948e82fd5b02b1f0230189225dda3aa85146bf0026e9fad",
"sha256:16ce9bdbd19bbaaba62c4e4e84a8126a567d70150311420402b7f0c15b4efbab",
"sha256:f5c3114dee88e80236f9f1adebcca19fae2ee9968c3b60da0b1e6914d336fed8",
"sha256:e1716e312f6e7eb621e0fafb32fddcd345e5468ce669b1f1daee47fe7ad634d7",
"sha256:266e68f02f27e9625854d9557fe9a6b5a5fae943bd6d4e1ff3dcacd39989a02a",
"sha256:bb8123e2006351f4b62affdb154eae8367e644a8d8e9fd0da1788b18408f19b6",
"sha256:84ba099958f2b87cf5be75629632133707d21dc10dc935e066e548efdd915c75",
"sha256:926b55efa3573e7bf0d8c6523284e9a9c4fc02d95d1e7b119684385472190a1f",
"sha256:c427d2f8da7e4f13377da3fe7d177396e3e80e3b29dab8f131296c7143374e97",
"sha256:792bb03dc9023c88d70b9e7a1d3ad054df02fc6bc60391cb6ad0fc5f0483c1a9",
"sha256:2a7d813ac3e7a6a72a0a8bf04a733f5af728ae7395f39daa6d4519371810b152",
"sha256:0d03b3e41a712c2a84305b9d12d885194e6ff56650315b4ba045dcb65c7bc29d",
"sha256:d1f190b05e35ab63103daee0c31b662858c93fe7d1dfe8d64b3f571f25bb21d0",
"sha256:691ff760c70d0bc4b893a4aa144b5e16ce7c41fb75bcd56a8145d09f1704bf43",
"sha256:01567fa04261f511564e6a30e3ae5dea8c85710b1d529a51ef060deea42eaa82",
"sha256:dbdfac084354dfdae11f25dad83a040b8d4d38a5df12d0126df2251d563b1e0a",
"sha256:40b09f79b7c6edfcd0588b94c5ebc4970c8ef0ae27612f9f875ec39d88bf1b1d",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:6cd32a967ad52e8089db73a84932fcd6c5181f87c407fb9178c7cff251c26ed3"
]
},
"Metadata": {
"LastTagTime": "2026-06-19T20:19:51.861557317+08:00"
}
}