Før .NET 8 kjørte containere som root som standard, og fra og med .NET 8 vil alle våre Linux-containerbilder inneholde brukere som ikke er root. Du vil kunne hoste .NET-containere med én enkelt kodelinje som ikke-root-bruker. Denne plattformnivåendringen vil gjøre applikasjonen din mer sikker og gjøre .NET til et av de sikreste utviklerøkosystemene. Dette er en liten endring, men det har stor innvirkning på forsvaret i dybden.
Forstå UID-ene og GID-ene i Docker-containere
Som standard kjører prosessen i containeren med root-brukerprivilegier, og denne root-brukeren er den samme som root-brukeren på vertsmaskinen. Høres ikke det skummelt ut, for det betyr at når en prosess i en beholder får riktig sjanse, kan den kontrollere alt på vertsmaskinen!
Referanse:Innloggingen med hyperkoblingen er synlig.
.NET 8 Docker-bilde
Det er to hovedendringer i .NET 8 Docker-bildet, som følger:
- Image oppretter en ny app-konto og gruppe, og kjører appen med app-kontoen som standard
- Byttet til port 8080, viste det seg å være port 80, siden port 80 er en privilegert port, kreves root-rettigheter (i hvert fall noen steder)
.NET Docker-bildekildekodeadresse:Innloggingen med hyperkoblingen er synlig.
Avhengighetene er som følger:
aspnet:8.0-bookworm-slim -> dotnet/runtime-8.0.0-bookworm-slim-amd64 -> dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 -> amd64/debian:bookworm-slim
dotnet/runtime-deps-8.0.0-bookworm-slim-amd64 ser slik ut:
Som vist nedenfor:
Bruk app-kontoen for å legge inn det grunnleggende bildet, og kommandoen er som følger:
Eksporter de nåværende bruker- og miljøvariablene, som vist i følgende figur:
Referanse:Innloggingen med hyperkoblingen er synlig.
Dockerfile-fil
Hvis du trenger å pakke prosjektet ditt inn i et Docker-image, må du opprette en ny .NET 8 Docker-containerstøtte, og standard Linux-miljøets Dockerfile-filkonfigurasjon er som følger:
Hvis du setter systemets tidssone i Dockerfile, følger følgende kode:
Feilen Tillatelse nektet kan oppstå som følger:
4>F:\itsvse\Dockerfile : feil CTC1014: #21 [final 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 4>F:\itsvse\Dockerfile : feil CTC1014: #21 0.314 ln: mislyktes i å opprette symbolsk lenke '/etc/localtime': Tillatelse nektet 4>F:\itsvse\Dockerfile : feil CTC1014: #21 FEIL: prosess "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" fullførte ikke vellykket: exit-kode: 1 4>F:\itsvse\Dockerfile : feil CTC1014: ------ 4>F:\itsvse\Dockerfile : feil CTC1014: > [siste 3/3] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : feil CTC1014: #21 0.314 ln: mislyktes i å opprette symbolsk lenke '/etc/localtime': Tillatelse nektet Bruk root-kontoen til å sette tidssonen, bytt deretter tilbake til app-kontoen, og endre den slik:
(Slutt)
|