Docker上的Asp.Net Core + SQL Server-睡眠以启动数据库

问题描述 投票:5回答:1

[我已经注意到,当我第一次尝试运行docker-compose up命令时,出现错误:

Starting mssql ...
Starting mssql ... done
Recreating api ...
Recreating api ... done
Attaching to mssql, api
api exited with code 1

因为api尝试从数据库中获取数据,但尚未启动MSSQL。

所以,我的问题是有可能以某种方式等待数据库并在运行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]
sql-server entity-framework docker asp.net-core docker-compose
1个回答
0
投票

您可以使用简单的entrypoint.sh脚本:

#!/bin/bash

set -e

run_cmd="dotnet your_app.dll"

sleep 10

exec $run_cmd

并且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" ]
© www.soinside.com 2019 - 2024. All rights reserved.