Peta dunia

 

EN: Read in English

Dunia D2: Resepi

Jalan sebagai USER bukan root

Anda akan belajar: jalankan aplikasi sebagai pengguna biasa, supaya penceroboh boleh buat lebih sedikit.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

whoami di dalam image api cetak root. Transkrip Docker: $ docker run --rm api:1.0 whoami root

Laptop anda~/api

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • api:1.06 layer · 244MB
  • node:24-alpine4 layer · 244MB

0 container (0 berjalan), 2 image, 0 loker.

API anda berjalan sebagai root di dalam bekas. Satu pepijat biarkan orang asing masuk. Sekarang orang asing itu pun root, dengan setiap kunci dapur.

Tengok

Ketik baris yang pilih siapa jalankan aplikasi.

0 daripada 1 dijumpai

pengguna bukan root (non-root user): Pengguna biasa dengan hak yang sedikit. Jika orang menceroboh, mereka boleh buat lebih sedikit. ada hak yang sedikit, macam pembantu dapur. USER node tukar kepada pengguna itu. Image node sudah ada pengguna bernama node.

Cuba

Tambah USER node di hujung resepi. Bina api:1.1. Kemudian tanya whoami.

Laptop anda~/api

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • api:1.06 layer · 244MB
  • node:24-alpine4 layer · 244MB

0 container (0 berjalan), 2 image, 0 loker.

Teka

Satu resepi tulis USER node, dan selepasnya RUN apk add --no-cache curl. Apa jadi?

Pilih satu jawapan.

Semak

Resepi oops tetapkan USER node sebelum RUN apk add. Build gagal: ERROR: Unable to open log: Permission denied, kod keluar 99. Transkrip Docker: $ cat oops/Dockerfile FROM node:24-alpine USER node RUN apk add --no-cache curl $ docker build -t api:oops oops [+] Building 0.1s (5/5) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 95B 0.0s => [internal] load metadata for docker.io/library/node:24-alpine 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/2] FROM docker.io/library/node:24-alpine@sha256:8a32c8cf649a49915a6 0.0s => => resolve docker.io/library/node:24-alpine@sha256:8a32c8cf649a49915a6 0.0s => ERROR [2/2] RUN apk add --no-cache curl 0.1s ------ > [2/2] RUN apk add --no-cache curl: 0.215 ERROR: Unable to open log: Permission denied ------ Dockerfile:3 -------------------- 1 | FROM node:24-alpine 2 | USER node 3 | >>> RUN apk add --no-cache curl 4 | -------------------- ERROR: failed to build: failed to solve: process "/bin/sh -c apk add --no-cache curl" did not complete successfully: exit code: 99

Laptop anda~/api

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • api:1.06 layer · 244MB
  • node:24-alpine4 layer · 244MB

0 container (0 berjalan), 2 image, 0 loker.

Ralat sebenar: Permission denied, kod keluar 99. Maksudnya: hanya root boleh memasang. Pasang dulu, kemudian tukar dengan USER.

Semak

Tabiat yang bagus? Leret ke kanan untuk ya, ke kiri untuk “perlu dibaiki”.

Leret ke kanan untuk bagus, ke kiri untuk perlu baiki. Atau guna butang.

1 / 4

Pasang pakej dulu, kemudian tambah USER dekat hujung

Pasang pakej dulu, kemudian tambah USER dekat hujung

Anda berjaya!

Kini anda boleh jalankan aplikasi sebagai pengguna bukan root.

Nak tahu lebih (pilihan)

docker run -u 1000 pilih pengguna untuk satu kali jalan. USER dalam resepi ialah pilihan asal yang selamat. Aplikasi perlu tulis satu folder? Serahkan kepadanya: COPY --chown=node:node . .. Dalam Dunia D5 anda tambah lagi kunci.

Misi sebenar

  1. docker run --rm hello:1.0 whoami

0 daripada 3 langkah siap · Tanda anda disimpan.