Een .NET-app-verwijzing containeriseren
In dit naslagartikel leert u hoe u de containerinstallatiekopieën configureert die worden gegenereerd wanneer u een .NET-app publiceert als een container. In dit artikel worden de verschillende eigenschappen beschreven die u kunt instellen om de installatiekopieën, de uitvoeringsomgeving en de opdrachten te beheren die worden uitgevoerd wanneer de container wordt gestart.
Containerinstallatiekopieën configureren
U kunt veel aspecten van de gegenereerde container beheren via MSBuild-eigenschappen. Als u in het algemeen een opdracht in een Dockerfile kunt gebruiken om een bepaalde configuratie in te stellen, kunt u hetzelfde doen via MSBuild.
Notitie
De enige uitzonderingen hierop zijn RUN
opdrachten. Vanwege de manier waarop containers worden gebouwd, kunnen deze niet worden geëmuleerd. Als u deze functionaliteit nodig hebt, kunt u overwegen om een Dockerfile- te gebruiken om uw containerinstallatiekopieën te bouwen.
Er is geen manier om RUN
opdrachten uit te voeren met de .NET SDK. Deze opdrachten worden vaak gebruikt om bepaalde besturingssysteempakketten te installeren of een nieuwe gebruiker van het besturingssysteem te maken, of een willekeurig aantal dingen. Als u de functie voor het bouwen van .NET SDK-containers wilt blijven gebruiken, kunt u in plaats daarvan een aangepaste basisinstallatiekopieën maken met deze wijzigingen en vervolgens deze basisinstallatiekopieën gebruiken. Zie ContainerBaseImage
voor meer informatie.
ContainerArchiveOutputPath
Als u een containerinstallatiekopieën in een tar.gz archief wilt maken, gebruikt u de eigenschap ContainerArchiveOutputPath
. Deze functie is handig als uw werkstroom niet eenvoudig is en u bijvoorbeeld een scanprogramma voor uw afbeeldingen moet uitvoeren voordat u ze pusht. Zodra het archief is gemaakt, kunt u het verplaatsen, scannen of laden in een lokale Docker-hulpprogrammaketen.
Als u naar een archief wilt publiceren, voegt u de eigenschap ContainerArchiveOutputPath
toe aan de opdracht dotnet publish
, bijvoorbeeld:
dotnet publish \
-p PublishProfile=DefaultContainer \
-p ContainerArchiveOutputPath=./images/sdk-container-demo.tar.gz
U kunt een mapnaam of een pad met een specifieke bestandsnaam opgeven. Als u de mapnaam opgeeft, wordt de bestandsnaam die is gegenereerd voor het archiefbestand van de installatiekopieën $(ContainerRepository).tar.gz
genoemd. Deze archieven kunnen meerdere tags bevatten, alleen omdat er slechts één bestand wordt gemaakt voor alle ContainerImageTags
.
Naamgevingsconfiguratie voor containerinstallatiekopieën
Containerinstallatiekopieën volgen een specifieke naamconventie. De naam van de installatiekopieën bestaat uit verschillende onderdelen, het register, de optionele poort, opslagplaats en optionele tag en familie.
REGISTRY[:PORT]/REPOSITORY[:TAG[-FAMILY]]
Denk bijvoorbeeld aan de volledig gekwalificeerde mcr.microsoft.com/dotnet/runtime:8.0-alpine
naam van de installatiekopieën:
-
mcr.microsoft.com
is het register (en in dit geval het Microsoft-containerregister). -
dotnet/runtime
is de opslagplaats (maar sommigen beschouwen dit als deuser/repository
). -
8.0-alpine
is de tag en familie (de familie is een optionele aanduiding die helpt bij het ondubbelzinnig maken van os-pakketten).
Sommige eigenschappen die in de volgende secties worden beschreven, komen overeen met het beheren van onderdelen van de gegenereerde installatiekopieënnaam. Bekijk de volgende tabel waarmee de relatie tussen de naam van de installatiekopieën en de build-eigenschappen wordt toegewezen:
Onderdeel Afbeeldingsnaam | MSBuild-eigenschap | Voorbeeldwaarden |
---|---|---|
REGISTRY[:PORT] |
ContainerRegistry |
mcr.microsoft.com:443 |
PORT |
ContainerPort |
:443 |
REPOSITORY |
ContainerRepository |
dotnet/runtime |
TAG |
ContainerImageTag |
8.0 |
FAMILY |
ContainerFamily |
-alpine |
In de volgende secties worden de verschillende eigenschappen beschreven die kunnen worden gebruikt om de gegenereerde containerinstallatiekopieën te beheren.
ContainerBaseImage
De eigenschap containerbasisinstallatiekopieën bepaalt de installatiekopieën die worden gebruikt als basis voor uw installatiekopieën. Standaard worden de volgende waarden afgeleid op basis van de eigenschappen van uw project:
- Als uw project op zichzelf staat, wordt de
mcr.microsoft.com/dotnet/runtime-deps
installatiekopieën gebruikt als basisinstallatiekopieën. - Als uw project een ASP.NET Core-project is, wordt de
mcr.microsoft.com/dotnet/aspnet
installatiekopieën gebruikt als basisinstallatiekopieën. - Anders wordt de
mcr.microsoft.com/dotnet/runtime
-installatiekopieën gebruikt als basisinstallatiekopieën.
De tag van de afbeelding wordt afgeleid als het numerieke onderdeel van uw gekozen TargetFramework
. Een project dat is gericht op net6.0
resulteert bijvoorbeeld in de 6.0
tag van de uitgestelde basisinstallatiekopieën, en een net7.0-linux
project maakt gebruik van de 7.0
tag, enzovoort.
Als u hier een waarde instelt, moet u de volledig gekwalificeerde naam van de installatiekopieën instellen voor gebruik als basis, inclusief een tag die u wilt gebruiken:
<PropertyGroup>
<ContainerBaseImage>mcr.microsoft.com/dotnet/runtime:8.0</ContainerBaseImage>
</PropertyGroup>
Met .NET SDK versie 8.0.200 wordt de ContainerBaseImage
deductie verbeterd om de grootte en beveiliging te optimaliseren:
- Als u de
linux-musl-x64
oflinux-musl-arm64
Runtime-id's wilt instellen, kiest u automatisch dealpine
afbeeldingsvarianten om ervoor te zorgen dat uw project wordt uitgevoerd:- Als het project
PublishAot=true
gebruikt, wordt denightly/runtime-deps
jammy-chiseled-aot
variant van de basisinstallatiekopieën gebruikt voor de beste grootte en beveiliging. - Als het project
InvariantGlobalization=false
gebruikt, worden de-extra
varianten gebruikt om ervoor te zorgen dat lokalisatie nog steeds werkt.
- Als het project
Zie .NET 8.0 Container Image Size Reportvoor meer informatie over de grootten en kenmerken van de afbeeldingsvarianten.
ContainerFamily
Vanaf .NET 8 kunt u de eigenschap ContainerFamily
MSBuild gebruiken om een andere familie van door Microsoft geleverde containerinstallatiekopieën te kiezen als basisinstallatiekopieën voor uw app. Wanneer deze waarde is ingesteld, wordt deze waarde toegevoegd aan het einde van de geselecteerde TFM-specifieke tag en wordt de opgegeven tag gewijzigd. Als u bijvoorbeeld de Alpine Linux-varianten van de .NET-basisinstallatiekopieën wilt gebruiken, kunt u ContainerFamily
instellen op alpine
:
<PropertyGroup>
<ContainerFamily>alpine</ContainerFamily>
</PropertyGroup>
De voorgaande projectconfiguratie resulteert in een laatste tag van 8.0-alpine
voor een .NET 8-doel-app.
Dit veld is vrij en kan vaak worden gebruikt om verschillende distributies van besturingssystemen, standaardpakketconfiguraties of andere smaak te selecteren wijzigingen in een basisinstallatiekopieën. Dit veld wordt genegeerd wanneer ContainerBaseImage
is ingesteld. Zie .NET-containerinstallatiekopieënvoor meer informatie.
ContainerRuntimeIdentifier
De eigenschap ContainerRuntimeIdentifier
geeft het besturingssysteem en de architectuur voor uw container op als de ContainerBaseImage
meerdere platforms ondersteunt. De mcr.microsoft.com/dotnet/runtime
-installatiekopieën ondersteunen bijvoorbeeld linux-x64
, linux-arm
, linux-arm64
en win10-x64
. Dit is standaard ingesteld op de RuntimeIdentifier
gebruikt bij het publiceren van de container. Normaal gesproken hoeft u deze eigenschap niet expliciet in te stellen; Gebruik in plaats daarvan de optie -r
met de opdracht dotnet publish
. Als de gekozen installatiekopieën de opgegeven RuntimeIdentifier
niet ondersteunen, geeft een fout de ondersteunde id's aan.
U kunt de eigenschap ContainerBaseImage
altijd instellen op een volledig gekwalificeerde installatiekopieënnaam, inclusief de tag, om te voorkomen dat u deze eigenschap helemaal hoeft te gebruiken.
<PropertyGroup>
<ContainerRuntimeIdentifier>linux-arm64</ContainerRuntimeIdentifier>
</PropertyGroup>
Zie RID-catalogusvoor meer informatie over de runtime-id's die worden ondersteund door .NET.
ContainerRegistry
De eigenschap containerregister bepaalt het doelregister, de plaats waarnaar de zojuist gemaakte installatiekopieën worden gepusht. Standaard wordt deze naar de lokale Docker-daemon gepusht, maar u kunt ook een extern register opgeven. Wanneer u een extern register gebruikt waarvoor verificatie is vereist, moet u verifiëren met behulp van de bekende docker login
mechanismen. Zie voor meer informatie verificatie bij containerregisters voor meer informatie. Bekijk het volgende XML-voorbeeld voor een concreet voorbeeld van het gebruik van deze eigenschap:
<PropertyGroup>
<ContainerRegistry>registry.mycorp.com:1234</ContainerRegistry>
</PropertyGroup>
Deze hulpprogramma's ondersteunen het publiceren naar elk register dat ondersteuning biedt voor de HTTP API V2 van Docker Registry V2. Dit omvat expliciet de volgende registers (en waarschijnlijk nog veel meer impliciet):
- Azure Container Registry-
- Amazon Elastic Container Registry-
- Google Artifact Registry
- Docker Hub
- GitHub Packages
- door GitLab gehoste Container Registry-
- Quay.io
Zie de registerspecifieke notitiesvoor notities over het werken met deze registers.
ContainerRepository
De containeropslagplaats is de naam van de installatiekopieën zelf, bijvoorbeeld dotnet/runtime
of my-app
. Standaard wordt de AssemblyName
van het project gebruikt.
<PropertyGroup>
<ContainerRepository>my-app</ContainerRepository>
</PropertyGroup>
Afbeeldingsnamen bestaan uit een of meer segmenten met slash-scheidingstekens, die elk alleen alfanumerieke tekens, punten, onderstrepingstekens en streepjes mogen bevatten en moeten beginnen met een letter of cijfer. Alle andere tekens leiden tot een fout die wordt gegenereerd.
ContainerImageTag(s)
De tageigenschap containerinstallatiekopieën bepaalt de tags die worden gegenereerd voor de installatiekopieën. Als u één tag wilt opgeven, gebruikt u ContainerImageTag
en voor meerdere tags ContainerImageTags
.
Belangrijk
Wanneer u ContainerImageTags
gebruikt, krijgt u uiteindelijk meerdere afbeeldingen, één per unieke tag.
Tags worden vaak gebruikt om te verwijzen naar verschillende versies van een app, maar ze kunnen ook verwijzen naar verschillende besturingssysteemdistributies of zelfs verschillende configuraties.
Vanaf .NET 8 wordt de standaardwaarde niet latest
wanneer een tag niet is opgegeven.
Als u de standaardwaarde wilt overschrijven, geeft u een van de volgende opties op:
<PropertyGroup>
<ContainerImageTag>1.2.3-alpha2</ContainerImageTag>
</PropertyGroup>
Als u meerdere tags wilt opgeven, gebruikt u een door puntkomma's gescheiden set tags in de eigenschap ContainerImageTags
, vergelijkbaar met het instellen van meerdere TargetFrameworks
:
<PropertyGroup>
<ContainerImageTags>1.2.3-alpha2;latest</ContainerImageTags>
</PropertyGroup>
Tags mogen maximaal 127 alfanumerieke tekens, punten, onderstrepingstekens en streepjes bevatten. Ze moeten beginnen met een alfanumerieke teken of een onderstrepingsteken. Elk ander formulier resulteert in een fout die wordt gegenereerd.
Notitie
Wanneer u ContainerImageTags
gebruikt, worden de tags gescheiden door een ;
teken. Als u dotnet publish
aanroept vanaf de opdrachtregel (zoals het geval is bij de meeste CI/CD-omgevingen), moet u de waarden in één '
en binnenste terugloop verpakken met dubbele aanhalingstekens "
, bijvoorbeeld (='"tag-1;tag-2"'
). Houd rekening met de volgende dotnet publish
opdracht:
dotnet publish -p ContainerImageTags='"1.2.3-alpha2;latest"'
Dit resulteert in twee afbeeldingen die worden gegenereerd: my-app:1.2.3-alpha2
en my-app:latest
.
Fooi
Als u problemen ondervindt met de eigenschap ContainerImageTags
, kunt u in plaats daarvan het bereik van een omgevingsvariabele ContainerImageTags
:
$Env:ContainerImageTags='1.2.3;latest'; dotnet publish --os linux --arch x64 /t:PublishContainer
ContainerLabel
Het containerlabel voegt een metagegevenslabel toe aan de container. Labels worden vaak gebruikt voor het opslaan van versie- en ontwerpmetagegevens voor gebruik door beveiligingsscanners en andere infrastructuurhulpprogramma's. U kunt een willekeurig aantal containerlabels opgeven.
Het knooppunt ContainerLabel
heeft twee kenmerken:
-
Include
: de sleutel van het label. -
Value
: de waarde van het label (dit kan leeg zijn).
<ItemGroup>
<ContainerLabel Include="org.contoso.businessunit" Value="contoso-university" />
</ItemGroup>
Zie standaardcontainerlabelsvoor een lijst met labels die standaard zijn gemaakt.
Containeruitvoering configureren
Als u de uitvoering van de container wilt beheren, kunt u de volgende MSBuild-eigenschappen gebruiken.
ContainerWorkingDirectory
Het containerwerkmapknooppunt bepaalt de werkmap van de container, de map waarin opdrachten worden uitgevoerd als er geen andere opdracht wordt uitgevoerd.
Standaard wordt de /app
mapwaarde gebruikt als werkmap.
<PropertyGroup>
<ContainerWorkingDirectory>/bin</ContainerWorkingDirectory>
</PropertyGroup>
ContainerPort
De containerpoort voegt TCP-poorten (Transmission Control Protocol) of UDP-poorten (User Datagram Protocol) toe aan de lijst met bekende poorten voor de container. Hierdoor kunnen containerruntimes zoals Docker deze poorten automatisch toewijzen aan de hostcomputer. Dit wordt vaak gebruikt als documentatie voor de container, maar kan ook worden gebruikt om automatische poorttoewijzing in te schakelen.
Het knooppunt ContainerPort
heeft twee kenmerken:
-
Include
: het poortnummer dat moet worden weergegeven. -
Type
: standaard ingesteld optcp
, geldige waarden zijntcp
ofudp
.
<ItemGroup>
<ContainerPort Include="80" Type="tcp" />
</ItemGroup>
Vanaf .NET 8 wordt de ContainerPort
afgeleid wanneer deze niet expliciet wordt verstrekt op basis van verschillende bekende ASP.NET omgevingsvariabelen:
ASPNETCORE_URLS
ASPNETCORE_HTTP_PORTS
ASPNETCORE_HTTPS_PORTS
Als deze omgevingsvariabelen aanwezig zijn, worden de waarden geparseerd en geconverteerd naar TCP-poorttoewijzingen. Deze omgevingsvariabelen worden gelezen uit uw basisinstallatiekopieën, indien aanwezig, of uit de omgevingsvariabelen die in uw project zijn gedefinieerd via ContainerEnvironmentVariable
items. Zie ContainerEnvironmentVariablevoor meer informatie.
ContainerEnvironmentVariable
Met het knooppunt voor de containeromgevingsvariabele kunt u omgevingsvariabelen toevoegen aan de container. Omgevingsvariabelen zijn onmiddellijk toegankelijk voor de app die in de container wordt uitgevoerd en worden vaak gebruikt om het runtimegedrag van de actieve app te wijzigen.
Het knooppunt ContainerEnvironmentVariable
heeft twee kenmerken:
-
Include
: de naam van de omgevingsvariabele. -
Value
: de waarde van de omgevingsvariabele.
<ItemGroup>
<ContainerEnvironmentVariable Include="LOGGER_VERBOSITY" Value="Trace" />
</ItemGroup>
Zie .NET-omgevingsvariabelenvoor meer informatie.
Notitie
Het is momenteel niet mogelijk om omgevingsvariabelen in te stellen vanuit de .NET CLI bij het publiceren van een containerinstallatiekopieën. Zie GitHub voor meer informatie: .NET SDK-container builds.
Containeropdrachten configureren
Standaard starten de containerhulpprogramma's uw app met behulp van het gegenereerde binaire AppHost-bestand voor uw app (als uw app gebruikmaakt van een AppHost) of de dotnet
-opdracht plus het DLL-bestand van uw app.
U kunt echter bepalen hoe uw app wordt uitgevoerd met behulp van een combinatie van ContainerAppCommand
, ContainerAppCommandArgs
, ContainerDefaultArgs
en ContainerAppCommandInstruction
.
Deze verschillende configuratiepunten bestaan omdat verschillende basisinstallatiekopieën verschillende combinaties van de eigenschappen van de container ENTRYPOINT
en COMMAND
gebruiken en u deze allemaal wilt kunnen ondersteunen. De standaardwaarden moeten worden gebruikt voor de meeste apps, maar als u het startgedrag van uw app wilt aanpassen, moet u het volgende doen:
- Identificeer het binaire bestand dat moet worden uitgevoerd en stel het in als
ContainerAppCommand
- Bepaal welke argumenten vereist voor het uitvoeren van uw toepassing en stel deze in als
ContainerAppCommandArgs
- Bepaal welke argumenten (indien aanwezig) optionele zijn en kan worden overschreven door een gebruiker en stel deze in als
ContainerDefaultArgs
-
ContainerAppCommandInstruction
instellen opDefaultArgs
Zie de volgende configuratie-items voor meer informatie.
ContainerAppCommand
Het configuratie-item voor de app-opdracht is het logische toegangspunt van uw app. Voor de meeste apps is dit de AppHost, het gegenereerde binaire bestand voor uw app. Als uw app geen AppHost genereert, wordt deze opdracht meestal dotnet <your project dll>
. Deze waarden worden toegepast na een ENTRYPOINT
in uw basiscontainer of rechtstreeks als er geen ENTRYPOINT
is gedefinieerd.
De ContainerAppCommand
-configuratie heeft één Include
eigenschap, die de opdracht, optie of het argument vertegenwoordigt dat moet worden gebruikt in de invoerpuntopdracht:
<ItemGroup Label="ContainerAppCommand Assignment">
<!-- This is how you would start the dotnet ef tool in your container -->
<ContainerAppCommand Include="dotnet" />
<ContainerAppCommand Include="ef" />
<!-- This shorthand syntax means the same thing, note the semicolon separating the tokens. -->
<ContainerAppCommand Include="dotnet;ef" />
</ItemGroup>
ContainerAppCommandArgs
Met deze app-opdracht wordt een configuratie-item gebruikt dat alle logisch vereiste argumenten vertegenwoordigt voor uw app die moeten worden toegepast op de ContainerAppCommand
. Standaard worden er geen gegenereerd voor een app. Wanneer deze aanwezig is, worden de argumenten toegepast op uw container wanneer deze wordt uitgevoerd.
De ContainerAppCommandArgs
-configuratie heeft één eigenschap Include
, die de optie of het argument vertegenwoordigt die moet worden toegepast op de opdracht ContainerAppCommand
.
<ItemGroup>
<!-- Assuming the ContainerAppCommand defined above,
this would be the way to force the database to update.
-->
<ContainerAppCommandArgs Include="database" />
<ContainerAppCommandArgs Include="update" />
<!-- This is the shorthand syntax for the same idea -->
<ContainerAppCommandArgs Include="database;update" />
</ItemGroup>
ContainerDefaultArgs
Dit standaardargumentenconfiguratie-item vertegenwoordigt alle argumenten die door de gebruiker kunnen worden overschreven voor uw app. Dit is een goede manier om standaardinstellingen te bieden die uw app mogelijk moet uitvoeren op een manier waarmee u eenvoudig kunt beginnen, maar nog steeds eenvoudig kunt aanpassen.
De ContainerDefaultArgs
-configuratie heeft één eigenschap Include
, die de optie of het argument vertegenwoordigt die moet worden toegepast op de opdracht ContainerAppCommand
.
<ItemGroup>
<!-- Assuming the ContainerAppCommand defined above,
this would be the way to force the database to update.
-->
<ContainerDefaultArgs Include="database" />
<ContainerDefaultArgs Include="update" />
<!-- This is the shorthand syntax for the same idea -->
<ContainerDefaultArgs Include="database;update" />
</ItemGroup>
ContainerAppCommandInstruction
Met de instructieconfiguratie van de app-opdracht kunt u bepalen hoe de ContainerEntrypoint
, ContainerEntrypointArgs
, ContainerAppCommand
, ContainerAppCommandArgs
en ContainerDefaultArgs
worden gecombineerd om de uiteindelijke opdracht te vormen die in de container wordt uitgevoerd. Dit is sterk afhankelijk van of een ENTRYPOINT
aanwezig is in de basisinstallatiekopieën. Deze eigenschap heeft een van de drie waarden: "DefaultArgs"
, "Entrypoint"
of "None"
.
-
Entrypoint
:- In deze modus wordt het invoerpunt gedefinieerd door
ContainerAppCommand
,ContainerAppCommandArgs
enContainerDefaultArgs
.
- In deze modus wordt het invoerpunt gedefinieerd door
-
None
:- In deze modus wordt het invoerpunt gedefinieerd door
ContainerEntrypoint
,ContainerEntrypointArgs
enContainerDefaultArgs
.
- In deze modus wordt het invoerpunt gedefinieerd door
-
DefaultArgs
:- Dit is de meest complexe modus: als er geen van de
ContainerEntrypoint[Args]
items aanwezig zijn, worden deContainerAppCommand[Args]
enContainerDefaultArgs
gebruikt om het invoerpunt en de opdracht te maken. Het ingangspunt van de basisinstallatiekopieën voor basisinstallatiekopieën waarop het in code is vastgelegd om tedotnet
of/usr/bin/dotnet
wordt overgeslagen, zodat u volledige controle hebt. - Als zowel
ContainerEntrypoint
alsContainerAppCommand
aanwezig zijn, wordtContainerEntrypoint
het invoerpunt en wordtContainerAppCommand
de opdracht.
- Dit is de meest complexe modus: als er geen van de
Notitie
De ContainerEntrypoint
- en ContainerEntrypointArgs
-configuratie-items worden afgeschaft vanaf .NET 8.
Belangrijk
Dit is bedoeld voor geavanceerde gebruikers. De meeste apps hoeven hun ingangspunt niet in deze mate aan te passen. Zie GitHub: .NET SDK-container bouwt discussiesvoor meer informatie en als u use cases voor uw scenario's wilt opgeven.
ContainerUser
De eigenschap gebruikersconfiguratie bepaalt de standaardgebruiker die door de container wordt uitgevoerd. Dit wordt vaak gebruikt om de container uit te voeren als een niet-hoofdgebruiker. Dit is een aanbevolen procedure voor beveiliging. Er zijn enkele beperkingen voor deze configuratie om rekening mee te houden:
- Het kan verschillende vormen aannemen: gebruikersnaam, linux-gebruikers-id's, groepsnaam, linux-groeps-id,
username:groupname
en andere id-varianten. - Er is geen verificatie dat de gebruiker of groep die is opgegeven op de installatiekopie bestaat.
- Als u de gebruiker wijzigt, kan het gedrag van de app worden gewijzigd, met name wat betreft zaken als Bestandssysteem machtigingen.
De standaardwaarde van dit veld varieert per project TFM en het doelbesturingssysteem:
- Als u zich richt op .NET 8 of hoger en de Installatiekopieën van Microsoft Runtime gebruikt, doet u het volgende:
- in Linux wordt de rootless gebruiker
app
gebruikt (hoewel ernaar wordt verwezen door de gebruikers-id) - in Windows wordt de
ContainerUser
van de gebruiker zonder hoofdmap gebruikt
- in Linux wordt de rootless gebruiker
- Anders wordt er geen standaard
ContainerUser
gebruikt
<PropertyGroup>
<ContainerUser>my-existing-app-user</ContainerUser>
</PropertyGroup>
Fooi
De omgevingsvariabele APP_UID
wordt gebruikt om gebruikersgegevens in uw container in te stellen. Deze waarde kan afkomstig zijn van omgevingsvariabelen die zijn gedefinieerd in uw basisinstallatiekopieën (zoals die van Microsoft .NET-installatiekopieën), of u kunt deze zelf instellen via de ContainerEnvironmentVariable
syntaxis.
Als u uw app wilt configureren voor uitvoering als hoofdgebruiker, stelt u de eigenschap ContainerUser
in op root
. Voeg in het projectbestand het volgende toe:
<PropertyGroup>
<ContainerUser>root</ContainerUser>
</PropertyGroup>
U kunt deze waarde ook instellen wanneer u dotnet publish
aanroept vanaf de opdrachtregel:
dotnet publish -p ContainerUser=root
Standaardcontainerlabels
Labels worden vaak gebruikt om consistente metagegevens op containerinstallatiekopieën te bieden. Dit pakket biedt enkele standaardlabels om de gegenereerde installatiekopieën beter te onderhouden.
-
org.opencontainers.image.created
is ingesteld op de ISO 8601-indeling van de huidige waarde van DateTime.UtcNow.
Zie Conventionele labels implementeren boven op de bestaande labelinfrastructuurvoor meer informatie.