Docker Hub Blocked

Symptom: docker pull hello-world hangs forever or times out.

Cause: Docker Hub is blocked or throttled in China.

Fix:

  1. Edit /etc/docker/daemon.json to add China mirrors
  2. Restart Docker: sudo systemctl restart docker
  3. Use ghcr.io for images that support it (Open WebUI)
💡 Mirror priority USTC (docker.mirrors.ustc.edu.cn) is the most reliable in our testing. Tencent and 163 are backups. Daocloud works but is slower.

Slow Model Downloads

Symptom: ollama pull qwen3:30b runs at 2 MB/s and takes 2+ hours.

Cause: Ollama downloads from international servers (likely Cloudflare R2 or similar).

Fix:

⚠️ Don't interrupt mid-download manually Let the timeout handle it. Ollama's resume works well. Manually Ctrl+C'ing sometimes corrupts the blob and requires ollama rm && ollama pull again.

Port 53 Conflict

Symptom: AdGuard Home container fails to start. docker-compose up errors with "port 53 already in use."

Cause: systemd-resolved owns port 53 on Ubuntu 24.04. You cannot bind it without stopping the system service first.

Fix options:

  1. Map web UI only: Use port 3001 for AdGuard's web interface. DNS functionality requires manual client configuration or router-level DNS forwarding.
  2. Disable systemd-resolved: sudo systemctl stop systemd-resolved && sudo systemctl disable systemd-resolved. Then map port 53 normally. May break some DNS resolution.
  3. Use a different DNS port: Map 5353:53 and configure clients/router to use port 5353. Most clients don't support non-standard DNS ports easily.

We chose option 1. AdGuard web UI works on 3001. DNS filtering would need router cooperation.

Jellyfin Permissions

Symptom: Jellyfin container starts but shows "Server is starting..." forever. Logs show permission denied on /config.

Cause: Config/cache directories created as root, but Jellyfin runs as UID 1000.

Fix:

sudo chown -R 1000:1000 /home/wm/ai-stack/jellyfin/
docker-compose restart jellyfin
💡 Pro tip Set user: "1000:1000" in docker-compose.yml so Jellyfin always runs as your user, not root. Then mkdir -p the directories before first run so they have correct ownership from the start.

Ollama Update Killed

Symptom: curl -fsSL https://ollama.com/install.sh | sh gets SIGKILL at 78-91%.

Cause: The update script downloads a large binary (~400MB+) which gets killed by resource/timeout limits in the execution environment.

Fix:

⚠️ Broken system service The apt-installed /etc/systemd/system/ollama.service crash-loops with port conflicts. It's been disabled. The user service at ~/.config/systemd/user/ollama.service is the correct one. Don't re-enable the system service.

Timeshift + NTFS

Symptom: Timeshift snapshot fails with "cannot unmount /media/wm/2TB-Data" or creates empty snapshots.

Cause: Timeshift wants exclusive mount control. If the partition is auto-mounted via fstab, Timeshift can't get it.

Fix:

  1. Set noauto in /etc/fstab for the target partition
  2. Create a systemd oneshot service that mounts after local-fs.target
  3. Enable the service: sudo systemctl enable mount-2tbdata.service
# /etc/systemd/system/mount-2tbdata.service
[Unit]
Description=Mount 2TB-Data partition
After=local-fs.target
Before=ollama.service

[Service]
Type=oneshot
ExecStart=/bin/mount /media/wm/2TB-Data
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Compose Version Bug

Symptom: docker-compose up fails with "ContainerConfig: command not found" or similar.

Cause: docker-compose v1 (apt-installed) has a bug parsing newer image manifests that omit ContainerConfig.

Fix:

WeCom on Ubuntu

Symptom: WeCom (企业微信) desktop client fails to install or extract.

Cause: The UOS/Deepin Wine compatibility layer is unreliable on some Ubuntu setups.

Fix:

  1. Use the web version: https://work.weixin.qq.com/ — most reliable on Linux
  2. For full features (calls), use your phone or an Android emulator
  3. WeChat desktop (personal) works fine — only WeCom (enterprise) has issues
💡 Separation of concerns WeChat (personal) = HER's channel. WeCom (enterprise) = Kimi's channel. They don't need to run on the same machine. Phone relay works fine.