Laden...

Docker: SQL-Server als container - exec format error

Erstellt von Palladin007 vor einem Jahr Letzter Beitrag vor einem Jahr 1.128 Views
Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr
Docker: SQL-Server als container - exec format error

Hi,

ich habe ein Nicht-C#-Problem, aber Docker gehört ja auch zur Infrastruktur 🙂

Folgendes:
Ich habe hier einen Raspberry Pi 4 mit Docker und zwei Containern am laufen, dafür habe ich Compose verwendet.
Nun soll auch noch ein SQL-Server dazu kommen.

Der Eintrag in der Docker-Compose-Datei.yml auf das Wesentliche reduziert:


sqlserver:
  image: mcr.microsoft.com/mssql/server:latest
  volumes:
    - ./sqlserver/start.sh:/start.sh
  entrypoint:
    - /start.sh

Volumes, Environment, Ports und Name sind natürlich auch da, aber (vermutlich) nicht relevant.

Spannend ist der merkwürdige Entrypoint, denn den habe ich eingetragen, um dem Fehler auf die Spur zu kommen.
Der Inhalt von start.sh:


#!/bin/bash

echo "Hello World"

Und wenn ich dann mit "docker compose up sqlserver" starte, bekomme ich folgende Ausgabe:

[+] Running 1/0
⠿ Container sqlserver Created
Attaching to sqlserver
sqlserver | exec /start.sh: exec format error
sqlserver exited with code 0
sqlserver exited with code 1
sqlserver exited with code 1
sqlserver exited with code 1

Und das geht dann ewig so weiter, bis ich abbreche.
Für mich klingt das so, als könne er generell nichts mit der sh-Datei anfangen, aber warum?

Den Fehler bekomme ich auch ohne den Entrypoint, dann steht da nicht "/start.sh", sondern "/opt/mssql/bin/permissions_check.sh" und exakt die gleiche Meldung.
Wenn ich das gleiche (Entrypoint-Eintrag + identische start.sh) in einem anderen funktionierenden Container einbaue, funktioniert es wunderbar.

Ich bin ratlos. Ich finde auch nichts passendes, oder ich suche einfach falsch. 😠
Eine ältere SQL-Server-Version funktioniert auch nicht. Ich hab's auch mit "mcr.microsoft.com/mssql/server:2019-latest" getestet, gleiches Ergebnis.

Hat jemand von euch eine Idee?

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.842 Beiträge seit 2008
vor einem Jahr

Rein basierend auf der Fehlermeldung klingt das für mich nach nem Architecture Error.
Sicher, dass Du ein kompatibles Image zu Raspberry verwendet hast?

Die MSSQL Docker Images, die offiziell sind, sind alle x64; nicht ARM.
Aber ich hab schon mal Azure SQL Edge problemlos auf einem Raspberry PI betrieben, das gibts für ARM.
Deploy Azure SQL Edge with Docker - Azure SQL Edge

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr

Daran hab ich gar nicht gedacht ...
Image inspect sagt mir architecture = amd64 😠
Dann kann das ja gar nicht funktionieren und ich such mir hier einen Wolf

Danke für den Hinweis, jetzt weiß ich, wonach ich suchen kann.
Oder ich versuch's mal mit Azure

Wie steht denn der Azure SQL Server zum "normalen" SQL Server?
Ich will den hauptsächlich als Test-Server für Projekte nutzen, aktuell immer EFCore + SQLServer, da sollte das natürlich passen.
Gibt's da relevante Unterschiede aus Sicht von EFCore?

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

6.911 Beiträge seit 2009
vor einem Jahr

Hallo Palladin007,

Ich will den hauptsächlich als Test-Server für Projekte nutzen, aktuell immer EFCore + SQLServer

Dazu nehm ich eine lokal gehostete Linux-VM (in VirtualBox), in welcher der SQL Server als Docker-Container läuft.
Der Container damit ein sehr einfaches Reset möglich ist.
Außerdem kann so ein vom SQL Server ein eigenes Image erstellt werden, das dann u.a. für CI verwendet wird.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr

Hm - ja, wäre auch eine Möglichkeit.
Der Pi hätte bloß den Charme, dass ich von unterschiedlichen Geräten (auch unterwegs mit VPN) darauf zugreifen kann und ich kann die Datenbank dann auch für private "produktive" Projekte nutzen.
Aber wenn das nicht geht, muss ich wohl auf die lokale Variante (VM oder WSL + Docker) zurückgreifen - oder ich teste aus, wie gut die Azure DB funktioniert.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.842 Beiträge seit 2008
vor einem Jahr

Also lokal arbeite ich mit Rancher Desktop, das um Welten stabiler und besser ist als Docker for Desktop (und ohne das sehr grenzwertige Verhalten der Docker Inc, zumindest die letzten 2 Jahre).
Rancher verwendet dazu die WSL. Dazu habe ich noch einen MSSQL auf einer x64 NAS; für "Onsite-Only" Dinge (https://blog.sqlxdetails.com/sql-server-2017-on-docker-inside-synology-ds918/).

Das Forum hier entwickeln wir genau so mit folgendem Image
GitHub - BenjaminAbt/mssql-fts-docker

Wie steht denn der Azure SQL Server zum "normalen" SQL Server?

Azure SQL Edge ist deutlich abgespeckt, wobei aber AI und Streaming Sachen da sind (weil eben Fokus auf IoT, wo das durchaus gebraucht wird).
Supported features of Azure SQL Edge
Es fehlt quasi alles, was für produktive Infrastruktur großer MSSQL Farms benötigt wird, was ja nicht Ziel von Azure SQL Edge ist.

Full Text Search ist auch so ein Ding das fehlt, weswegen wir das nicht fürs Forum nutzen können.

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr

das um Welten stabiler und besser ist als Docker for Desktop (und ohne das sehr grenzwertige Verhalten der Docker Inc, zumindest die letzten 2 Jahre).

Was meinst Du damit?

Ich werde aber vorerst bei Docker bleiben, einfach weil ich es nur privat nutze, es für mich bisher ausreicht und ich nie Probleme damit hatte.
Vielleicht ändert sich das noch oder ich brauche es für die Arbeit, aber bis dahin ergibt ein Umstieg für mich keinen Sinn.

Aber es ist interessant, dass es da noch mehr auf dem Markt gibt, das Konzept ist genial und darf sich gerne weiter verbreiten ^^

Azure SQL Edge ist deutlich abgespeckt, wobei aber AI und Streaming Sachen da sind (weil eben Fokus auf IoT, wo das durchaus gebraucht wird).
Supported features of Azure SQL Edge

Dann kommt das für mich nicht in Frage.
Privat schon, aber für berufliche Projekte arbeite ich dann doch lieber mit dem System, mit dem es am Ende auch laufen wird.

Also bleibe ich erst einmal beim lokalen SQL Server in einer VM oder mit WSL + Docker, je nachdem, was für mich besser passt.

Ich danke für Eure Hilfe, Ihr habt mir, auch wenn es ein "weiter wie bisher" ist, eine Menge Kopfzerbrechen erspart.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.842 Beiträge seit 2008
vor einem Jahr

das um Welten stabiler und besser ist als Docker for Desktop (und ohne das sehr grenzwertige Verhalten der Docker Inc, zumindest die letzten 2 Jahre).
Was meinst Du damit?

Ich werde aber vorerst bei Docker bleiben, einfach weil ich es nur privat nutze, es für mich bisher ausreicht und ich nie Probleme damit hatte.

Docker Inc ist eine kommerzielle Firma, die zB für Docker for Desktop verantwortlich ist; also eine UI Anwendung um die Open Source Bits von "Docker".
Die Qualität dieser Software hat immens nachgelassen, dafür wurde das Lizenzverhalten immer dubioser, was viele Leute weg von Docker for Desktop getrieben hat.
Mittlerweile gibt es - eben durch das Verhalten von Docker Inc - mehr Konkurrenz auf dem Markt für Docker-UIs; eben auch Rancher (gehört mittlerweile zu SUSE) mit ihrem Rancher Desktop.

Ich werde aber vorerst bei Docker bleiben

Docker und Docker für Desktop sind zwei paar Stiefel; und letzteres ist eben aufgrund der Lizenzierung mittlerweile problematisch* bei vielen Firmen.
*problematisch nicht nur wegen den "plötzlichen" Kosten selbst, sondern vor allem weil die Lizenzierung sich mehrmals sehr spontan geändert hat und viele Firmen diese Kurzfristigkeit als unverhältnismäßig und mit Vertrauensverlust abgestraft haben. Man kann einfach nicht planen, wenn Docker Inc finanziell mit dem Rücken zur Wand steht statt ein stabiler Lizenzpartner zu sein.

Palladin007 Themenstarter:in
2.080 Beiträge seit 2012
vor einem Jahr

Danke für die Aufklärung.

Docker und Docker für Desktop sind zwei paar Stiefel

Das war mir nicht bewusst

Vielleicht erklärt das auch, warum ich nie Probleme hatte, ich nutze Docker für Desktop (fast) gar nicht.
Und auf meinem Pi habe ich sowieso keine UI, ich nutze also nur Terminal und docker compose.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.