Sql server Asp.Net核心&x2B;Docker上的SQL Server-用于启动数据库的睡眠
我注意到,当我第一次尝试运行docker compose up命令时,出现了一个错误:Sql server Asp.Net核心&x2B;Docker上的SQL Server-用于启动数据库的睡眠,sql-server,entity-framework,docker,asp.net-core,docker-compose,Sql Server,Entity Framework,Docker,Asp.net Core,Docker Compose,我注意到,当我第一次尝试运行docker compose up命令时,出现了一个错误: Starting mssql ... Starting mssql ... done Recreating api ... Recreating api ... done Attaching to mssql, api api exited with code 1 因为api试图从DB获取数据,但MSSQL尚未启动 所以,我的问题是,是否可以以某种方式等待DB,然后运行API 这是我的docker comp
Starting mssql ...
Starting mssql ... done
Recreating api ...
Recreating api ... done
Attaching to mssql, api
api exited with code 1
因为api试图从DB获取数据,但MSSQL尚未启动
所以,我的问题是,是否可以以某种方式等待DB,然后运行API
这是我的docker compose和dockerfile
docker compose:
版本:“3.3”
服务:
api:
image: api
container_name: api
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:80"
depends_on:
- db
db:
image: "microsoft/mssql-server-linux"
container_name: mssql
environment:
SA_PASSWORD: "testtest3030!"
ACCEPT_EULA: "Y"
MSSQL_PID: "Express"
ports:
- "8001:1433"
dockerfile:
# Build Stage
FROM microsoft/aspnetcore-build as build-env
WORKDIR /source
COPY . .
RUN dotnet restore
RUN dotnet publish -o /publish --configuration Release
# Publish Stage
FROM microsoft/aspnetcore
WORKDIR /app
COPY --from=build-env /publish .
ENTRYPOINT ["dotnet", "Api.dll"]
我在日志中也注意到:
2017-11-17 22:12:42.67 Logon Error: 18456, Severity: 14, State: 38.
2017-11-17 22:12:42.67 Logon Login failed for user 'sa'. Reason: Failed to open the explicitly specified database 'MyDb'. [CLIENT: 172.26.0.3]
您可以使用一个简单的entrypoint.sh脚本:
docker文件将相应更改:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-bionic AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY ["src/entrypoint.sh", ""]
RUN chmod +x entrypoint.sh
# .... here your copy/restore/build/publish
ENTRYPOINT [ "/bin/bash", "entrypoint.sh" ]
你找到解决办法了吗?我可能面临着同样的问题,我个人所做的就是将应用程序和数据库服务分开。因此,首先以守护程序模式启动DB服务,它们始终保持运行。之后,您可以根据需要多次重新启动任何应用程序容器,并始终启动和运行DB。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-bionic AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY ["src/entrypoint.sh", ""]
RUN chmod +x entrypoint.sh
# .... here your copy/restore/build/publish
ENTRYPOINT [ "/bin/bash", "entrypoint.sh" ]