J'ai un conteneur déployant un frontal dans ASP.NET Core essayant de se connecter à la base de données SQL Server principale. J'utilise Windows 10 avec Docker Desktop v19.03.13.

Le conteneur du site Web repose sur

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app

EXPOSE 80

# Copy csproj and restore as distinct layers
COPY ./FOOBAR/*.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "FOOBAR.dll"]

La base de données est construite sur

FROM mcr.microsoft.com/mssql/server:2017-latest
USER root
COPY setup.sql setup.sql
COPY import-data.sh import-data.sh
COPY entrypoint.sh entrypoint.sh
RUN chmod +x entrypoint.sh
CMD /bin/bash ./entrypoint.sh

Tout fonctionne à merveille lors de l'exécution en dehors de docker, .NET, Python, SQL Server Management Studio.

Dans .NET, ma chaîne de connexion est:

Server=localhost;Database=FOOBAR;Integrated Security=True

En Python:

DRIVER={ODBC Driver 17 for SQL Server};server=localhost;database=FOOBAR;Trusted_Connection=yes;

J'ai donc besoin de le déployer sur un réseau qui n'a pas de contrôleur de domaine, donc je dois gérer toutes les authentifications de base de données.

Lorsque je construis mes conteneurs, je change ma chaîne de connexion .NET en

dbConnection="Server=host.docker.internal;Database=FOOBAR;User Id=sa;Password=Password1!;"

Je crée mes conteneurs avec

docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=Password1! -p 1433:1433 -v c:\temp\:/var/opt/mssql/data --name foobar_db -d foobar_db:1.0
docker run -p 8080:80 --name foobar --link foobar_db:foobar_db -d foobar:1.0

Mes conteneurs tournent, ma base de données est déployée très bien. À partir de l'hôte, je peux utiliser SQL Server Management Studio et Python, et me connecter à mon conteneur de base de données en utilisant les informations d'identification ci-dessus, et me connecter et effectuer des lectures / écritures parfaitement.

Lorsque je me connecte à partir du .NET en utilisant

Server=host.docker.internal;Database=FOOBAR;User Id=sa;Password=Password1!;

Je peux voir mon conteneur SQL Server se plaindre d'une connexion invalide,

Échec de la connexion pour l'utilisateur '6794cfd81d48 \ Guest'

Où je peux confirmer que 6794cfd81d48 est le hachage de mon conteneur SQL Server, foobar_db.

IIS sert des pages Web très bien, le problème est de se connecter à la base de données. Même si je fournis le nom d'utilisateur et le mot de passe corrects, je ne peux pas me connecter d'un autre conteneur au conteneur SQL Server car il pense que je suis un invité de ce conteneur. En fonction de l'environnement de déploiement, je créerais normalement des connexions SQL Server, soit pour une machine, soit pour un utilisateur, mais pas dans ce cas.

0
user0495890 16 févr. 2021 à 22:52

1 réponse

Meilleure réponse

Une application logicielle de sécurité informatique offensante a été identifiée comme la cause. Le service informatique a défini un passthrough afin que les applications docker puissent par la sécurité et que tout fonctionne comme prévu.

0
user0495890 7 mars 2021 à 16:40