We have created ASP NET Core App with existing sql server.
const string connectionString = @"Server=hostname\sqlexpress;Database=DEVDB;User Id=sa;Password=password;";
services.AddDbContext<RecruitmentToolsDatabaseContext>(options => options.UseSqlServer(connectionString));
It works on windows. After creating docker image with same settings we can't connect to db server.
The error:
fail: Microsoft.EntityFrameworkCore.Query.Internal.SqlServerQueryCompilationContextFactory[1]
An exception occurred in the database while iterating the results of a query.
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.(provider: TCP Provider, error: 35 - An internal exception was caught) ---> System.AggregateException: One or more errors occurred. (No such device or address) ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: No such device or address
at System.Net.Dns.HostResolutionEndHelper(IAsyncResult asyncResult)
at System.Net.Dns.EndGetHostAddresses(IAsyncResult asyncResult)
at System.Net.Dns.<>c.<GetHostAddressesAsync>b__14_1(IAsyncResult asyncResult)
at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
We have created freetds configuration /etc/freetds/freetds.conf
[dev01]
host = hostname
instance = sqlexpress
tds version = 8.0"
and we were able to connect to that db using sqsh.
Any ideas?
Edit
My Dockerfile:
FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app
# Install apt packages
RUN apt-get update && apt-get install -y \
freetds-bin \
freetds-common \
freetds-dev \
sqsh
RUN touch /etc/freetds/freetds.conf
RUN echo "[dev01]" > /etc/freetds/freetds.conf
RUN echo "host = hostname" >> /etc/freetds/freetds.conf
RUN echo "instance = sqlexpress" >> /etc/freetds/freetds.conf
RUN echo "tds version = 8.0" >> /etc/freetds/freetds.conf
RUN touch /home/.sqshrc
RUN echo "\set username=sa" > /home/.sqshrc
RUN echo "\set password=password" >> /home/.sqshrc
RUN echo "\set style=vert" >> /home/.sqshrc
RUN ["dotnet", "restore"]
RUN ["dotnet", "build"]
EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000
ENTRYPOINT ["dotnet", "run"]
#CMD ["bash"]
Besides normal ASP .NET Core this image contains freetds and sqsh for our testing purpose. Our app starts normally and it is working. The problem happen when we try to connect to sql it throws .net exception.