Docker部署navidrome
创建Dockerfile
FROM alpine:latest AS downloader
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
ARG VERSION
ENV BUILDX_ARCH="${TARGETOS:-linux}_${TARGETARCH:-amd64}${TARGETVARIANT}"
ENV ND_DATAFOLDER=./data
ENV ND_MUSICFOLDER=./music
ENV ND_ADDRESS=0.0.0.0
ENV ND_PORT=4533
WORKDIR /
RUN echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/latest-stable/main/" > /etc/apk/repositories && \
echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/latest-stable/community/" >> /etc/apk/repositories
RUN apk add --no-cache ffmpeg
RUN wget https://gh-proxy.org/https://github.com/navidrome/navidrome/releases/download/v${VERSION}/navidrome_${VERSION}_${BUILDX_ARCH} \
&& tar -zxvf navidrome_${VERSION}_${BUILDX_ARCH} -C ./ \
&& chmod +x /navidrome \
&& rm -f navidrome_${VERSION}_${BUILDX_ARCH}
RUN mkdir -p /data /music
VOLUME ["/data", "/music"]
EXPOSE 4533
CMD ["./navidrome"]编译镜像并创建容器
[root@ecs ~]# docker build . -t navidrome --progress=plain \
--build-arg VERSION=0.61.2 \
--build-arg TARGETVARIANT=.tar.gz
[root@ecs ~]# docker run --name navidrome \
-p 4533:4533 \
--restart=unless-stopped \
-v /data/navidrome/data:/data \
-v /data/music:/music:ro \
--user $(id -u):$(id -g) \
-e ND_LOGLEVEL=info \
-d navidrome也可使用官方镜像:deluan/navidrome:latest。
防火墙开放端口
firewall-cmd --zone=public --add-port=4533/tcp --permanent
firewall-cmd --reload管理地址:http://192.168.3.103:4533
软件维护
查看数据库路径
[root@ecs ~]# docker exec navidrome env | grep ND_DATAFOLDER ND_DATAFOLDER=./data [root@ecs ~]# docker exec navidrome find / -name navidrome.db 2>/dev/null /data/navidrome.db [root@ecs ~]# docker inspect navidrome --format='{{range .Mounts}}{{printf "%s -> %s\n" .Source .Destination}}{{end}}' /data/music -> /music /data/navidrome/data -> /data2>/dev/null:将标准错误重定向到/dev/null,>/dev/null 2>&1同&>/dev/null:将标准输出和标准错误同时重定向到/dev/null;
&1表示文件描述符1(标准输出stdout),2>&1表示将文件描述符2(标准错误stderr)重新指向文件描述符1。如果改成2>1则表示将标准错误指向当前目录的文件1。--format='':使用Go语言模板语法来格式化输出;{{range .Mounts}}{{end}}:遍历所有的挂载卷(即docker inspect navidrome数据中Mounts数组)。