If docker container is running and you are not able to connect to database, this blog should help you fix it.
Prerequisite -
- Make sure code is working via running aspnet core locally via visual studio or command line.
- Port 1433 is opened for connecting to SQL server.
Solution
If you have Docker file ready, it should somewhat look like below file -
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY /SampleAPI/*.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . .
WORKDIR /app/SampleAPI
RUN dotnet publish -c Production -o publish
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app/SampleAPI
COPY --from=build-env /app/SampleAPI .
WORKDIR /app/SampleAPI/bin/Production/netcoreapp3.1
ENTRYPOINT ["dotnet", "SampleAPI.dll"]
Add following lines to make database connectivity
#To connect to database
RUN sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g' /etc/ssl/openssl.cnf
RUN sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g' /usr/lib/ssl/openssl.cnf
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /usr/lib/ssl/openssl.cnf
The above lines invoke 'sed'(stream Editor) to open file and edit it.
- Line 1 is modfying '/etc/ssl/openssl.conf' file and replacing MinProtocal = TLSv1.2 to MinProtocol = TLSv1.
- Line 2 is modifying same protocol in another file.
- Line 3 is setting the security level from DEFAULT@SECLEVEL=2 to DEFAULT@SECLEVEL=1.
- Line 4 is modifying the same in another file.
Note: You can add first 2 OR last 2 OR all lines depending upon connection issue with database.
Final Docker file will look something like that -
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY /SampleAPI/*.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . .
WORKDIR /app/SampleAPI
RUN dotnet publish -c Production -o publish
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
#To connect to database
RUN sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g' /etc/ssl/openssl.cnf
RUN sed -i 's/MinProtocol = TLSv1.2/MinProtocol = TLSv1/g' /usr/lib/ssl/openssl.cnf
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /etc/ssl/openssl.cnf
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/g' /usr/lib/ssl/openssl.cnf
WORKDIR /app/SampleAPI
COPY --from=build-env /app/SampleAPI .
WORKDIR /app/SampleAPI/bin/Production/netcoreapp3.1
ENTRYPOINT ["dotnet", "SampleAPI.dll"]
Build Docker image
docker build -t sampleapi:latest .
Run Docker container
docker run -rm -p 5000:80 sampleapi:latest
where 80 is default port of docker container and 5000 port to expose to internet.
Browse the API and it should respond with successful database connection.
Alternatively
bionic version of aspnet core image can be used -
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build-env
WORKDIR /app
# Copy csproj and restore as distinct layers
COPY /DPRR-API/*.csproj ./
RUN dotnet restore
# Copy everything else and build
COPY . .
WORKDIR /app/DPRR-API
RUN dotnet publish -c Production -o publish
# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-bionic
WORKDIR /app/DPRR-API
COPY --from=build-env /app/DPRR-API .
WORKDIR /app/DPRR-API/bin/Production/netcoreapp3.1
ENTRYPOINT ["dotnet", "DPRR-API.dll"]
By using bionic image of aspnet core(mcr.microsoft.com/dotnet/core/sdk:3.1-bionic), there should not be any need of modifying the TLS or default settings.
Please share your feedback if it works for you.
Thanks for sparing out time to write comment on post. Please elaoborate more on what you would like to advice.
ReplyDeleteinformative article...!
ReplyDeletedata science course in noida
cool stuff you have and you keep redesign all of us
ReplyDeleteHRDF training
This is such a great resource that you are providing and you give it away for free.
ReplyDeletedigital marketing courses in hyderabad with placements
ReplyDeleteIf you don"t mind proceed with this extraordinary work and I anticipate a greater amount of your magnificent blog entries
Digital Marketing Training Institutes in Hyderabad
All things considered I read it yesterday however I had a few considerations about it and today I needed to peruse it again on the grounds that it is very elegantly composed.
ReplyDeletedata scientist course
Good information you shared. keep posting.
ReplyDeletemachine learning course in aurangabad
Nice blog post,
ReplyDeleteDigital Marketing Interview Questions and Answers