Je souhaite exécuter un script SQL sur la configuration du conteneur MS SQL.

Si je fais tout séparément, tout fonctionne bien :

  1. Exécuter le conteneur docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Password" -p 1434:1433 --name ms-sql -d mcr.microsoft.com/mssql/server:2019-latest

  2. Se connecter au conteneur docker exec -it ms-sql "bash"

  3. Exécuter SQL /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Password' -Q 'create database TestDB12'

Mais si essayez de faire la même chose lors de la création du conteneur

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Password" -p 1434:1433 --name ms-sql -d mcr.microsoft.com/mssql/server:2019-latest sh -c "/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Password' -Q 'create database TestDB12'"

sqlcmd ne parvient pas à se connecter avec une erreur

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..
answer

En fournissant sh -c "/opt/mssql-tools/bin/sqlcmd ...à la commande run, vous remplacez la commande qui démarre le serveur SQL dans le conteneur par la sqlcmdcommande.

Le serveur n'est pas démarré à l'intérieur du conteneur. Vous devez d'abord le démarrer et exécuter votre commande une fois le démarrage terminé.