Я схожу с ума, пытаясь найти способ безопасного получения строки подключения в контейнер docker при использовании Heroku. Это то, что документы сказали мне:
"Мы предлагаем использовать ENV для переменных времени выполнения (например, GEM_PATH) и конфигурацию heroku для учетных данных, чтобы конфиденциальные учетные данные не были случайно проверены в источнике Контроль кода. "
В этом случае для строки подключения я хотел бы установить переменную через конфигурацию heroku, вот что я сделал. Нажмите this , пытаясь использовать конфигурацию heroku: edit, поэтому я использую конфигурацию heroku - json.
Эта переменная находится там:
"ConnectionStrings__Default": "MyConnectionString"
Что касается того, как передать это в настоящий dockerfile, я не очень хорошо разбираюсь с docker, поэтому многое из этого - работа с догадками в сочетании с тем, что я нашел о внешнем получении строк соединения в c# здесь, Я подозреваю, что проблема где-то здесь, поэтому, пожалуйста, скажите мне, если это неверно:
# publish
FROM build AS publish
WORKDIR /src/webapplication/webapplication
RUN dotnet publish -c Release -o /src/publish
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
WORKDIR /app
COPY --from=publish /src/publish .
# heroku uses the following
CMD Default=$ConnectionStrings__Default ASPNETCORE_URLS=http://*:$PORT dotnet webapplication.dll
Правильно ли я вставляю переменную конфигурации в приложение ядра pnet в docker таким образом ? Я мог найти очень мало примеров этого, так что не уверен.
Код, получающий строку подключения (работает при использовании json .config):
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string basePath = Directory.GetCurrentDirectory();
if (!optionsBuilder.IsConfigured)
{
var builder = new ConfigurationBuilder()
.SetBasePath(basePath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
IConfigurationRoot configuration = builder.Build();
string connectionString = configuration.GetConnectionString("Default");
optionsBuilder.UseSqlServer(connectionString)
.EnableSensitiveDataLogging();
optionsBuilder.UseLazyLoadingProxies();
}
}
Ошибка:
System.ArgumentNullException: Value cannot be null. (Parameter 'connectionString')
Если бы кто-нибудь мог дать мне несколько указателей, это означало бы для меня мир, потому что я хочу развернуть эту штуку, но я не знаю, что делать.