Sebelum .NET 8, kontainer berjalan sebagai root secara default, dan dimulai dengan .NET 8, semua gambar kontainer Linux kami akan berisi pengguna non-root. Anda akan dapat menghosting kontainer .NET dengan satu baris kode sebagai pengguna non-root. Perubahan tingkat platform ini akan membuat aplikasi Anda lebih aman dan menjadikan .NET salah satu ekosistem pengembang paling aman. Ini adalah perubahan kecil, tetapi berdampak besar pada pertahanan yang mendalam.
Memahami UID dan GID dalam kontainer Docker
Secara default, proses dalam kontainer berjalan dengan hak istimewa pengguna root, dan pengguna root ini adalah pengguna yang sama dengan root di komputer host. Bukankah itu terdengar menakutkan, karena itu berarti bahwa begitu proses dalam wadah memiliki kesempatan yang tepat, ia dapat mengontrol semua yang ada di mesin host!
Referensi:Login hyperlink terlihat.
Gambar Docker .NET 8
Ada dua perubahan utama pada gambar .NET 8 Docker, sebagai berikut:
- Image membuat akun dan grup aplikasi baru, dan menjalankan aplikasi dengan akun aplikasi secara default
- Beralih ke port 8080, ternyata port 80, karena port 80 adalah port istimewa, hak istimewa root diperlukan (setidaknya di beberapa tempat)
Alamat kode sumber gambar .NET Docker:Login hyperlink terlihat.
Dependensinya adalah sebagai berikut:
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 terlihat seperti ini:
Seperti yang ditunjukkan di bawah ini:
Gunakan akun aplikasi untuk memasukkan gambar dasar, dan perintahnya adalah sebagai berikut:
Keluarkan variabel pengguna dan lingkungan saat ini, seperti yang ditunjukkan pada gambar berikut:
Referensi:Login hyperlink terlihat.
File Dockerfile
Jika Anda perlu mengemas proyek Anda ke dalam gambar Docker, Anda perlu membuat dukungan kontainer .NET 8 Docker baru, dan konfigurasi file Dockerfile lingkungan Linux default adalah sebagai berikut:
Jika Anda mengatur zona waktu sistem di Dockerfile, kode berikut:
Kesalahan Izin ditolak dapat terjadi sebagai berikut:
4>F:\itsvse\Dockerfile : kesalahan CTC1014: #21 [3/3 terakhir] RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone 4>F:\itsvse\Dockerfile : kesalahan CTC1014: #21 0.314 ln: gagal membuat tautan simbolis '/etc/localtime': Izin ditolak 4>F:\itsvse\Dockerfile : kesalahan CTC1014: #21 KESALAHAN: proses "/bin/sh -c ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone" tidak berhasil diselesaikan: kode keluar: 1 4>F:\itsvse\Dockerfile: kesalahan CTC1014: ------ 4>F:\itsvse\Dockerfile: kesalahan CTC1014: > [3/3 terakhir] JALANKAN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone: 4>F:\itsvse\Dockerfile : kesalahan CTC1014: #21 0.314 ln: gagal membuat tautan simbolis '/etc/localtime': Izin ditolak Gunakan akun root untuk mengatur zona waktu, lalu beralih kembali ke akun aplikasi, dan ubah sebagai berikut:
(Akhir)
|