{"id":220,"date":"2026-04-27T10:32:41","date_gmt":"2026-04-27T02:32:41","guid":{"rendered":"https:\/\/jsbmw.cn\/?p=220"},"modified":"2026-04-27T10:32:41","modified_gmt":"2026-04-27T02:32:41","slug":"2026%e6%9c%80%e6%96%b0%e6%89%8b%e6%8a%8a%e6%89%8b%ef%bc%9a%e9%bb%91%e7%be%a4%e6%99%96docker%e9%83%a8%e7%bd%b2%e5%b8%b8%e7%94%a8%e6%9c%8d%e5%8a%a1%e8%b6%85%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b","status":"publish","type":"post","link":"http:\/\/jsbmw.cn\/index.php\/2026\/04\/27\/2026%e6%9c%80%e6%96%b0%e6%89%8b%e6%8a%8a%e6%89%8b%ef%bc%9a%e9%bb%91%e7%be%a4%e6%99%96docker%e9%83%a8%e7%bd%b2%e5%b8%b8%e7%94%a8%e6%9c%8d%e5%8a%a1%e8%b6%85%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b\/","title":{"rendered":"2026\u6700\u65b0\u624b\u628a\u624b\uff1a\u9ed1\u7fa4\u6656Docker\u90e8\u7f72\u5e38\u7528\u670d\u52a1\u8d85\u8be6\u7ec6\u6559\u7a0b"},"content":{"rendered":"<p>## \u524d\u8a00<\/p>\n<p>\u9ed1\u7fa4\u6656\u88c5\u597d\u540e\uff0c\u6700\u5f3a\u5927\u7684\u529f\u80fd\u5c31\u662f Docker\u3002\u901a\u8fc7 Docker \u53ef\u4ee5\u4e00\u952e\u90e8\u7f72\u5404\u79cd\u670d\u52a1\uff1a\u4e0b\u8f7d\u5de5\u5177\u3001\u5a92\u4f53\u670d\u52a1\u5668\u3001\u79c1\u6709\u7f51\u76d8\u3001\u7167\u7247\u7ba1\u7406\u2026\u2026\u672c\u6559\u7a0b\u6559\u4f60\u4ece Docker \u57fa\u7840\u914d\u7f6e\u5f00\u59cb\uff0c\u9010\u4e2a\u90e8\u7f72\u6700\u5e38\u7528\u7684 6 \u4e2a\u670d\u52a1\uff0c\u6bcf\u4e2a\u90fd\u6709\u5b8c\u6574\u7684 docker-compose \u914d\u7f6e\u548c\u64cd\u4f5c\u8bf4\u660e\u3002<\/p>\n<p>## \u4e00\u3001Docker \u73af\u5883\u914d\u7f6e<\/p>\n<p>### \u7b2c1\u6b65\uff1a\u5b89\u88c5 Docker \u5957\u4ef6<\/p>\n<p>1. \u6253\u5f00 DSM \u2192 **\u5957\u4ef6\u4e2d\u5fc3**<br \/>\n2. \u641c\u7d22 **Container Manager**\uff08DSM 7.2 \u53eb\u8fd9\u4e2a\uff09\u6216 **Docker**\uff08DSM 7.1\uff09<br \/>\n3. \u70b9\u51fb **\u5b89\u88c5** \u2192 \u7b49\u5f85\u5b89\u88c5\u5b8c\u6210<\/p>\n<p>### \u7b2c2\u6b65\uff1a\u5f00\u542f SSH \u5e76\u8fde\u63a5<\/p>\n<p>&#8220;`<br \/>\n\u63a7\u5236\u9762\u677f \u2192 \u7ec8\u7aef\u673a\u548c SNMP \u2192 \u542f\u7528 SSH \u529f\u80fd<br \/>\n&#8220;`<\/p>\n<p>\u7535\u8111\u7ec8\u7aef\u6267\u884c\uff1a<\/p>\n<p>&#8220;`bash<br \/>\nssh \u4f60\u7684\u7ba1\u7406\u5458\u540d@\u9ed1\u7fa4\u6656IP<br \/>\n# \u8f93\u5165\u5bc6\u7801<br \/>\n&#8220;`<\/p>\n<p>### \u7b2c3\u6b65\uff1a\u914d\u7f6e Docker \u955c\u50cf\u52a0\u901f<\/p>\n<p>&#8220;`bash<br \/>\n# \u7f16\u8f91 Docker \u914d\u7f6e<br \/>\nsudo mkdir -p \/etc\/docker<br \/>\nsudo tee \/etc\/docker\/daemon.json <<'EOF'\n{\n  \"registry-mirrors\": [\n    \"https:\/\/docker.1panel.live\",\n    \"https:\/\/hub.rat.dev\",\n    \"https:\/\/docker.m.daocloud.io\",\n    \"https:\/\/dockerpull.org\",\n    \"https:\/\/dockerhub.icu\"\n  ],\n  \"log-driver\": \"json-file\",\n  \"log-opts\": {\n    \"max-size\": \"10m\",\n    \"max-file\": \"3\"\n  }\n}\nEOF\n\n# \u91cd\u542f Docker\nsudo systemctl restart docker\n```\n\n### \u7b2c4\u6b65\uff1a\u521b\u5efa\u76ee\u5f55\u7ed3\u6784\n\n```bash\n# \u5728\u5171\u4eab\u6587\u4ef6\u5939\u4e2d\u521b\u5efa Docker \u6570\u636e\u76ee\u5f55\nsudo mkdir -p \/volume1\/docker\/{jellyfin,qbittorrent,navidrome,frpc,alist,lucky}\n```\n\n## \u4e8c\u3001\u90e8\u7f72 Jellyfin \u5a92\u4f53\u670d\u52a1\u5668\n\nJellyfin \u662f\u5b8c\u5168\u514d\u8d39\u5f00\u6e90\u7684\u5a92\u4f53\u670d\u52a1\u5668\uff0c\u53ef\u4ee5\u770b\u7535\u5f71\u3001\u7535\u89c6\u5267\u3001\u52a8\u6f2b\u3002\n\n### docker-compose.yml\n\n```bash\nsudo tee \/volume1\/docker\/jellyfin\/docker-compose.yml <<'EOF'\nversion: \"3.8\"\nservices:\n  jellyfin:\n    image: jellyfin\/jellyfin:latest\n    container_name: jellyfin\n    environment:\n      - PUID=0\n      - PGID=0\n      - TZ=Asia\/Shanghai\n      - JELLYFIN_PublishedServerUrl=http:\/\/\u9ed1\u7fa4\u6656IP:8096\n    volumes:\n      - \/volume1\/docker\/jellyfin\/config:\/config\n      - \/volume1\/docker\/jellyfin\/cache:\/cache\n      - \/volume1\/media\/movies:\/media\/movies:ro\n      - \/volume1\/media\/tv:\/media\/tv:ro\n      - \/volume1\/media\/anime:\/media\/anime:ro\n    ports:\n      - \"8096:8096\"     # Web \u754c\u9762\n      - \"8920:8920\"     # HTTPS\n      - \"7359:7359\/udp\" # \u5ba2\u6237\u7aef\u53d1\u73b0\n    restart: unless-stopped\nEOF\n```\n\n### \u542f\u52a8\n\n```bash\ncd \/volume1\/docker\/jellyfin\nsudo docker compose up -d\n```\n\n### \u8bbf\u95ee\n\n\u6d4f\u89c8\u5668\u6253\u5f00 `http:\/\/\u9ed1\u7fa4\u6656IP:8096`\uff0c\u6309\u5411\u5bfc\u6dfb\u52a0\u5a92\u4f53\u5e93\u3002\n\n## \u4e09\u3001\u90e8\u7f72 qBittorrent \u4e0b\u8f7d\u5de5\u5177\n\n### docker-compose.yml\n\n```bash\nsudo tee \/volume1\/docker\/qbittorrent\/docker-compose.yml <<'EOF'\nversion: \"3.8\"\nservices:\n  qbittorrent:\n    image: linuxserver\/qbittorrent:latest\n    container_name: qbittorrent\n    environment:\n      - PUID=0\n      - PGID=0\n      - TZ=Asia\/Shanghai\n      - WEBUI_PORT=8080\n    volumes:\n      - \/volume1\/docker\/qbittorrent\/config:\/config\n      - \/volume1\/downloads:\/downloads\n    ports:\n      - \"8080:8080\"     # Web \u7ba1\u7406\u754c\u9762\n      - \"6881:6881\"     # BT \u4e0b\u8f7d\u7aef\u53e3\n      - \"6881:6881\/udp\"\n    restart: unless-stopped\nEOF\n```\n\n### \u542f\u52a8\u548c\u8bbf\u95ee\n\n```bash\ncd \/volume1\/docker\/qbittorrent\nsudo docker compose up -d\n```\n\n\u6d4f\u89c8\u5668\u6253\u5f00 `http:\/\/\u9ed1\u7fa4\u6656IP:8080`\n\n\u9ed8\u8ba4\u8d26\u53f7\uff1a`admin`  \u9ed8\u8ba4\u5bc6\u7801\uff1a`adminadmin`\n\n> **\u9996\u6b21\u767b\u5f55\u540e\u7acb\u5373\u4fee\u6539\u5bc6\u7801\uff01**<\/p>\n<p>## \u56db\u3001\u90e8\u7f72 Alist \u6587\u4ef6\u7ba1\u7406\u5668<\/p>\n<p>Alist \u652f\u6301\u7f51\u76d8\u805a\u5408\uff0c\u53ef\u4ee5\u7edf\u4e00\u7ba1\u7406\u963f\u91cc\u4e91\u76d8\u3001\u767e\u5ea6\u7f51\u76d8\u3001\u5929\u7ffc\u4e91\u76d8\u7b49\u3002<\/p>\n<p>### docker-compose.yml<\/p>\n<p>&#8220;`bash<br \/>\nsudo tee \/volume1\/docker\/alist\/docker-compose.yml <<'EOF'\nversion: \"3.8\"\nservices:\n  alist:\n    image: xhofe\/alist:latest\n    container_name: alist\n    environment:\n      - PUID=0\n      - PGID=0\n      - TZ=Asia\/Shanghai\n    volumes:\n      - \/volume1\/docker\/alist\/data:\/opt\/alist\/data\n    ports:\n      - \"5244:5244\"\n    restart: unless-stopped\nEOF\n```\n\n### \u83b7\u53d6\u521d\u59cb\u5bc6\u7801\n\n```bash\nsudo docker logs alist 2>&#038;1 | grep password<br \/>\n# \u8f93\u51fa\u7c7b\u4f3c\uff1ainitial password: xxxxxxxx<br \/>\n&#8220;`<\/p>\n<p>### \u8bbf\u95ee<\/p>\n<p>\u6d4f\u89c8\u5668\u6253\u5f00 `http:\/\/\u9ed1\u7fa4\u6656IP:5244`\uff0c\u7528\u521d\u59cb\u5bc6\u7801\u767b\u5f55\u540e\u4fee\u6539\u3002<\/p>\n<p>## \u4e94\u3001\u90e8\u7f72 NaviDrome \u97f3\u4e50\u670d\u52a1\u5668<\/p>\n<p>### docker-compose.yml<\/p>\n<p>&#8220;`bash<br \/>\nsudo tee \/volume1\/docker\/navidrome\/docker-compose.yml <<'EOF'\nversion: \"3.8\"\nservices:\n  navidrome:\n    image: deluan\/navidrome:latest\n    container_name: navidrome\n    environment:\n      - PUID=0\n      - PGID=0\n      - TZ=Asia\/Shanghai\n      - ND_SCANSCHEDULE=1h\n      - ND_LOGLEVEL=info\n      - ND_SESSIONTIMEOUT=24h\n    volumes:\n      - \/volume1\/docker\/navidrome\/data:\/data\n      - \/volume1\/media\/music:\/music:ro\n    ports:\n      - \"4533:4533\"\n    restart: unless-stopped\nEOF\n```\n\n### \u8bbf\u95ee\n\n\u6d4f\u89c8\u5668\u6253\u5f00 `http:\/\/\u9ed1\u7fa4\u6656IP:4533`\uff0c\u521b\u5efa\u7ba1\u7406\u5458\u8d26\u53f7\u3002\n\n## \u516d\u3001\u90e8\u7f72 frpc \u5185\u7f51\u7a7f\u900f\n\n\u8ba9\u5916\u7f51\u4e5f\u80fd\u8bbf\u95ee\u4f60\u7684\u9ed1\u7fa4\u6656\u670d\u52a1\u3002\n\n### docker-compose.yml\n\n```bash\nsudo tee \/volume1\/docker\/frpc\/docker-compose.yml <<'EOF'\nversion: \"3.8\"\nservices:\n  frpc:\n    image: snowdreamtech\/frpc:latest\n    container_name: frpc\n    volumes:\n      - \/volume1\/docker\/frpc\/frpc.toml:\/etc\/frp\/frpc.toml\n    restart: unless-stopped\nEOF\n```\n\n### frpc.toml \u914d\u7f6e\n\n```bash\nsudo tee \/volume1\/docker\/frpc\/frpc.toml <<'EOF'\nserverAddr = \"\u4f60\u7684VPS\u516c\u7f51IP\"\nserverPort = 7000\nauth.token = \"\u4f60\u7684frps\u5bc6\u7801\"\n\n[[proxies]]\nname = \"dsm-web\"\ntype = \"tcp\"\nlocalIP = \"127.0.0.1\"\nlocalPort = 5000\nremotePort = 5000\n\n[[proxies]]\nname = \"jellyfin\"\ntype = \"tcp\"\nlocalIP = \"127.0.0.1\"\nlocalPort = 8096\nremotePort = 8096\n\n[[proxies]]\nname = \"qbittorrent\"\ntype = \"tcp\"\nlocalIP = \"127.0.0.1\"\nlocalPort = 8080\nremotePort = 8080\nEOF\n```\n\n## \u4e03\u3001\u4e00\u952e\u7ba1\u7406\u6240\u6709\u5bb9\u5668\n\n### \u542f\u52a8\u6240\u6709\u670d\u52a1\n\n```bash\nfor dir in \/volume1\/docker\/*\/; do\n  if [ -f \"$dir\/docker-compose.yml\" ]; then\n    echo \"\u542f\u52a8: $dir\"\n    cd \"$dir\" &#038;&#038; sudo docker compose up -d\n  fi\ndone\n```\n\n### \u67e5\u770b\u6240\u6709\u5bb9\u5668\u72b6\u6001\n\n```bash\nsudo docker ps -a --format \"table {{.Names}}\\t{{.Status}}\\t{{.Ports}}\"\n```\n\n### \u66f4\u65b0\u6240\u6709\u5bb9\u5668\n\n```bash\nfor dir in \/volume1\/docker\/*\/; do\n  if [ -f \"$dir\/docker-compose.yml\" ]; then\n    echo \"\u66f4\u65b0: $dir\"\n    cd \"$dir\" &#038;&#038; sudo docker compose pull &#038;&#038; sudo docker compose up -d\n  fi\ndone\nsudo docker image prune -f\n```\n\n## \u516b\u3001\u5e38\u89c1\u62a5\u9519\u89e3\u51b3\n\n| \u62a5\u9519 | \u539f\u56e0 | \u89e3\u51b3\u65b9\u6848 |\n|------|------|---------|\n| `\u955c\u50cf\u62c9\u53d6\u8d85\u65f6` | \u56fd\u5185\u7f51\u7edc\u95ee\u9898 | \u914d\u7f6e\u955c\u50cf\u52a0\u901f\u5668 |\n| `\u7aef\u53e3\u88ab\u5360\u7528` | DSM \u81ea\u5e26\u670d\u52a1\u5360\u4e86\u7aef\u53e3 | \u6362\u4e00\u4e2a\u6620\u5c04\u7aef\u53e3 |\n| `\u6743\u9650\u4e0d\u8db3\u8bfb\u5199\u6587\u4ef6` | PUID\/PGID \u8bbe\u7f6e\u4e0d\u5bf9 | \u8bbe\u4e3a 0\uff08root\uff09 |\n| `\u5bb9\u5668\u542f\u52a8\u540e\u7acb\u5373\u9000\u51fa` | \u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u9519\u8bef | `docker logs \u5bb9\u5668\u540d` \u67e5\u770b\u9519\u8bef |\n| `\u6570\u636e\u4e22\u5931` | volumes \u6ca1\u6620\u5c04 | \u5fc5\u987b\u6620\u5c04\u6570\u636e\u76ee\u5f55 |\n| `Jellyfin \u8f6c\u7801\u5931\u8d25` | \u6ca1\u6709\u786c\u4ef6\u52a0\u901f | \u4f4e\u914d\u7528 CPU \u8f6f\u89e3\u5373\u53ef |\n| `qBittorrent \u4e0b\u8f7d\u6162` | \u7aef\u53e3\u672a\u5f00\u653e | \u8def\u7531\u5668\u6620\u5c04 6881 \u7aef\u53e3 |\n| `Alist \u6302\u8f7d\u7f51\u76d8\u5931\u8d25` | Token \u8fc7\u671f | \u91cd\u65b0\u83b7\u53d6\u7f51\u76d8 Token |\n\n## \u4e5d\u3001\u907f\u5751\u603b\u7ed3\n\n1. \u6240\u6709\u6570\u636e\u76ee\u5f55\u5fc5\u987b\u6620\u5c04\u5230 `\/volume1\/`\uff0c\u4e0d\u7136\u5bb9\u5668\u91cd\u5efa\u6570\u636e\u5c31\u6ca1\u4e86\n2. PUID\/PGID \u8bbe 0 \u6700\u7701\u4e8b\uff0c\u907f\u514d\u5404\u79cd\u6743\u9650\u95ee\u9898\n3. \u6bcf\u4e2a\u670d\u52a1\u4e00\u4e2a\u72ec\u7acb\u76ee\u5f55\uff0c\u65b9\u4fbf\u7ba1\u7406\u548c\u5907\u4efd\n4. \u955c\u50cf\u52a0\u901f\u5668\u5fc5\u914d\uff0c\u56fd\u5185\u4e0d\u914d\u57fa\u672c\u62c9\u4e0d\u52a8\n5. \u5b9a\u671f\u7528 `docker image prune` \u6e05\u7406\u65e0\u7528\u955c\u50cf\u91ca\u653e\u7a7a\u95f4\n6. \u91cd\u8981\u6570\u636e\u52a1\u5fc5\u5907\u4efd config \u76ee\u5f55\n7. \u4e0d\u8981\u7528 latest \u6807\u7b7e\u76f2\u76ee\u66f4\u65b0\uff0c\u6709\u91cd\u5927\u7248\u672c\u66f4\u65b0\u5148\u770b changelog\n\n\u672c\u6587\u7531\u6280\u672f\u4fdd\u59c6\u7f51 JSBMW.CN \u539f\u521b\uff0c\u8f6c\u8f7d\u8bf7\u6ce8\u660e\u51fa\u5904\u3002\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>## \u524d\u8a00 \u9ed1\u7fa4\u6656\u88c5\u597d\u540e\uff0c\u6700\u5f3a\u5927\u7684\u529f\u80fd\u5c31\u662f Docker\u3002\u901a\u8fc7 Docker \u53ef\u4ee5\u4e00\u952e\u90e8\u7f72\u5404\u79cd\u670d\u52a1\uff1a\u4e0b\u8f7d\u5de5\u5177\u3001 &hellip; <a href=\"http:\/\/jsbmw.cn\/index.php\/2026\/04\/27\/2026%e6%9c%80%e6%96%b0%e6%89%8b%e6%8a%8a%e6%89%8b%ef%bc%9a%e9%bb%91%e7%be%a4%e6%99%96docker%e9%83%a8%e7%bd%b2%e5%b8%b8%e7%94%a8%e6%9c%8d%e5%8a%a1%e8%b6%85%e8%af%a6%e7%bb%86%e6%95%99%e7%a8%8b\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">2026\u6700\u65b0\u624b\u628a\u624b\uff1a\u9ed1\u7fa4\u6656Docker\u90e8\u7f72\u5e38\u7528\u670d\u52a1\u8d85\u8be6\u7ec6\u6559\u7a0b<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-220","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/posts\/220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/comments?post=220"}],"version-history":[{"count":1,"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/posts\/220\/revisions"}],"predecessor-version":[{"id":221,"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/posts\/220\/revisions\/221"}],"wp:attachment":[{"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/media?parent=220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/categories?post=220"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/jsbmw.cn\/index.php\/wp-json\/wp\/v2\/tags?post=220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}