无法从我的docker化.NET Core应用访问SQL Server

时间:2019-06-11 22:42:52

标签: .net sql-server docker

我正在使用docker在VPS中部署Web应用程序(Ubuntu 18.04)。

这是我的Dockerfile

FROM microsoft/dotnet:latest
COPY . /app
WORKDIR /app

RUN dotnet restore
RUN dotnet build

EXPOSE 5000/tcp
ENV ASPNETCORE_URLS http://*:5000
ENV ASPNETCORE_ENVIRONMENT docker

ENTRYPOINT [ "dotnet", "watch", "run", "--no-restore", "--urls", "http://*:5000"]

我也使用Nginx,它运作良好(http://www.onserassure.com

它已经与SQLite一起运行,但是我想使用SQL Server。因此,我发现本教程可以在Mac / Linux上使用SQL Server:https://www.phillipsj.net/posts/working-with-sql-server-on-linux-for-dotnet-development 而且效果很好。我用以下命令运行SQL Server容器:

 docker run -d --name sql_server_demo -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=XXXXX' -p 1433:1433 microsoft/mssql-server-linux

并使用此连接字符串:

"Server=localhost;Database=Movies;User Id=sa;Password=XXXXXXX;"

因此,在本地使用简单的dotnet run可以正常工作

但是,当我将应用程序放入容器(甚至是本地容器)时,它无法访问我的数据库...

我真的不明白为什么。我正在Macbook上进行测试,而VPS在Linux上

1 个答案:

答案 0 :(得分:1)

因此,看起来您在一个容器中有.net核心应用程序,然后在单独的容器中运行数据库。如果是这样,那么您的连接字符串将无法在.net核心应用容器中使用。容器内的Localhost与主机的localhost不同。

您可以尝试使用主机网络来查看是否可能是此问题。 我记得主机联网选项在Mac和Windows上的Docker Desktop上有一些时髦的行为。如果您使用的是Linux,应该可以。

尽管如此,我还是建议您使用类似docker-compose的工具。