我正在使用以下命令在 Ubuntu 上运行 SQL 服务器容器
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=MyPassword' \
-p 1433:1433 --name db \
-d microsoft/mssql-server-linux:2017-latest`
我在运行 WebAPI Core 应用程序的同一台机器上有另一个容器,如果我在连接字符串中指定了服务器 ip,但如果我用“localhost”或“。”替换它,一切正常。它无法连接。
有人遇到同样的问题吗?我不想每次在新机器上运行我的应用程序时都修改连接字符串。
编辑 1: 我需要在构建过程中启动并运行我的数据库以应用 EntityFramework 代码首先迁移,所以我不能只将 SQL Server 添加为 docker-compose.yml 中的依赖项
编辑 2 这是我的 docker-compose.yml
version: '3'
services:
webapi:
image: webapi
build:
context: ./
dockerfile: ./WebAPI/Dockerfile
args:
- connString=Server=db;Database...;
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://+:80
- conneString="Server=db;Database..."
ports:
- 50695:80
depends_on:
- db
db:
image: "microsoft/mssql-server-linux:2017-latest"
container_name: db
networks:
default:
external:
name: nat
还有我的码头文件
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
ARG connString
ENV connString "$connString"
WORKDIR /src
COPY *.sln ./
COPY WebAPI/WebAPI.csproj WebAPI/
RUN dotnet restore
COPY . .
WORKDIR /src/Repository
RUN dotnet restore
RUN dotnet ef database update
WORKDIR /src/WebAPI
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebAPI.dll"]