Källanvändaren tolkade misslyckandet som att ”Docker inte kan installera en avbildning efter en ren ominstallation”, men terminalutdata visade i själva verket två separata problem. Att köra docker info utan utökade behörigheter misslyckades på Docker-socketen, medan körning av Mosquitto-containern med Docker-behörigheter hämtade eclipse-mosquitto:latest. Containern misslyckades sedan av en annan orsak: bind-mounten försökte behandla en värdsökväg och en containersökväg som inkompatibla fil-/katalogtyper.
Denna åtskillnad är avgörande. Att installera om Debian, CasaOS eller Docker löser inte en bind-mount som pekar på fel typ av filsystemobjekt.
Problem 1: Den normala användaren kunde inte komma åt Docker-socketen
Det första docker info utdata var:
behörighet nekades vid försök att ansluta till Docker-daemonens socket
unix:///var/run/docker.sock
Det innebär att skalets användare inte hade behörighet att kommunicera direkt med Docker-daemonen. Samma kommando fungerade med sudo, vilket bevisade att själva daemonen gick att nå.
Detta är separat från det senare Mosquitto-startfelet.
Mosquitto-avbildningen hämtades utan problem
Docker rapporterade:
Status: Hämtade nyare avbildning för eclipse-mosquitto:latest
Registret, avbildningsnamnet och internetanslutningen var alltså inte det omedelbara problemet. Felet uppstod först när Docker försökte skapa containerns filsystem och tillämpa bind-mounten.
Det verkliga felet gällde montering av fil kontra katalog
Kommandot försökte mappa:
/etc/mosquitto/mosquitto.conf
→ /mosquitto/config/mosquitto.conf
Docker rapporterade sedan:
inte en katalog
Försöker du montera en katalog på en fil (eller tvärtom)?
Det meddelandet ska tolkas bokstavligt. En sida av mappningen var inte av den typ som kommandot förväntade sig.
Varför -v automatiskt kan skapa fel typ
Den aktuella Docker-dokumentationen förklarar en vanlig fallgrop med -v/--volume: om källsökvägen inte finns skapar Docker den automatiskt som en katalog.
Så om /etc/mosquitto/mosquitto.conf inte redan fanns som en riktig fil kunde Docker skapa en katalog med namnet mosquitto.confOm den katalogen monteras på containerns förväntade konfigurationsfil uppstår exakt det fel som visas i den ursprungliga tråden.
Använd Dockers aktuella bind-mount-beteende för att kontrollera om källan är en fil eller en katalog innan containern startas.
Communityn gick över till att mappa Mosquitto-kataloger
En svarare delade en Compose-definition som mappade tre beständiga kataloger:
- värdens konfigurationskatalog →
/mosquitto/config - värdens datakatalog →
/mosquitto/data - värdens loggkatalog →
/mosquitto/log
Detta undviker den ömtåliga monteringen av en enda fil som kanske inte finns ännu och ger Mosquitto en normal beständig layout.
Konfigurationsfilen måste fortfarande finnas i konfigurationskatalogen
Att mappa katalogen skapar inte automatiskt en giltig Mosquitto-konfiguration. Svararen bad användaren att placera mosquitto.conf i den mappade konfigurationskatalogen innan brokern startas.
För en ny driftsättning bör du först skapa konfigurationen som en riktig fil och sedan montera dess överordnade katalog eller använda Dockers mer explicita --mount syntax, som misslyckas i stället för att i tysthet skapa en katalog för en saknad källsökväg.
CasaOS anpassade installation kan uttrycka samma layout utan ett direkt docker run-kommando
Communityn vägledde användaren genom att importera en Compose-definition via CasaOS arbetsflöde för anpassade applikationer. Användaren installerade senare ett Mosquitto-paket från en community-appbutik och rapporterade att det fungerade direkt.
Det resultatet bekräftar att själva Docker-värden kunde köra Mosquitto; det tidigare problemet var konfigurationen, inte en misslyckad ominstallation av CasaOS.
En körande broker behöver fortfarande MQTT-autentisering och lyssnarkonfiguration
Källanvändaren frågade sedan varför Node-RED inte anslöt och om Mosquitto automatiskt skulle använda användarnamnet och lösenordet från terminalen. Det gör den inte. MQTT-autentisering konfigureras av Mosquitto självt via dess konfiguration och lösenordsfiler.
Anta inte att en grön containerstatus innebär att broker-tjänsten är redo för klienter utan autentisering.
Tidszonen var den sista containerkonfigurationsdetaljen
Efter att ha installerat ett fungerande community-paket behövde användaren fortfarande lägga till rätt tidszonsvärde som miljövariabel. Det är en applikations-/runtime-detalj, inte ett tecken på ytterligare ett Docker-installationsfel.
Vanliga frågor om Docker-fel med Mosquitto
Misslyckades Docker med att ladda ned eclipse-mosquitto?
Nej. Källutdata visar att avbilden laddades ned utan problem.
Varför kunde containern inte starta?
Bind-monteringen hade en konflikt mellan fil och katalog kring mosquitto.conf.
Varför kan en saknad värdfil bli en katalog med docker -v?
Dockers --volume beteendet skapar en saknad källsökväg på värden som en katalog, vilket kan göra att en bind-montering från fil till fil slutar fungera.
Löste ominstallationen av CasaOS problemet?
Nej. Användaren lyckades till slut efter att ha använt en korrekt applikations-/containerkonfiguration.
