创建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 -> /data
    
    • 2>/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数组)。

标签: none

添加新评论