Cannot connect to SQL Server from a Docker container

asp.net-core docker entity-framework-core linux sql-server

Question

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.

1
2
8/19/2016 11:14:27 AM

Accepted Answer

According to this answer you must wait for new version of .net core or install sql server default instance.

3
8/25/2016 2:12:27 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow