Peta dunia

 

EN: Read in English

Dunia D3: Loker & Talian Telefon

Jangan simpan rahsia dalam image

Anda akan belajar: kenapa kata laluan dalam Dockerfile bocor, dan cara serahkannya semasa run.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

Dockerfile ada ENV DB_PASSWORD=kancil123. Binaan beri amaran SecretsUsedInArgOrEnv. Mana-mana bekas daripada image itu cetak kancil123. Transkrip Docker: $ cat Dockerfile FROM nginx:1.30-alpine ENV DB_PASSWORD=kancil123 COPY site/ /usr/share/nginx/html/ $ docker build -t shop:1.0 . [+] Building 0.1s (7/7) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 120B 0.0s => WARN: SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "DB_PASSWORD") (line 2) => [internal] load metadata for docker.io/library/nginx:1.30-alpine 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/2] FROM docker.io/library/nginx:1.30-alpine@sha256:0e52bd054126cdc0 0.0s => => resolve docker.io/library/nginx:1.30-alpine@sha256:0e52bd054126cdc0 0.0s => [internal] load build context 0.0s => => transferring context: 135B 0.0s => [2/2] COPY site/ /usr/share/nginx/html/ 0.0s => exporting to image 0.1s => => exporting layers 0.0s => => exporting manifest sha256:77265d7416b79e6aa8d371cacd3f3215a929664ee 0.0s => => exporting config sha256:5a6636cf193c938e2901b31bb63b3efe1d79c93b0ad 0.0s => => exporting attestation manifest sha256:fc83d324dd5546609c3b107e62115 0.0s => => exporting manifest list sha256:8469b3576d7a624bdb8db40a60109fe99154 0.0s => => naming to docker.io/library/shop:1.0 0.0s => => unpacking to docker.io/library/shop:1.0 0.0s 1 warning found (use docker --debug to expand): - SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ENV "DB_PASSWORD") (line 2) $ docker run --rm shop:1.0 printenv DB_PASSWORD kancil123

Laptop anda~/shop

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • nginx:1.30-alpine8 layer · 93.5MB

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

Resepi tulis ENV DB_PASSWORD=kancil123. Docker pun beri amaran: SecretsUsedInArgOrEnv. Kini setiap bekas daripada image ini tahu kata laluan itu.

Tengok

secret: Maklumat rahsia seperti token; jangan letak dalam kod. (rahsia) ialah kotak rempah berkunci. Jangan kacau ke dalam resepi. Serahkan hanya bila hidangan dihidang. Susun yang ini.

Seret kad ke dalam kotak. Atau ketik kad, kemudian ketik kotak.

      Teka

      Anda push shop:1.0 ke registry awam. Siapa boleh baca kata laluan itu?

      Pilih satu jawapan.

      Semak

      Ini docker history untuk shop:1.0. Tekan baris yang bocor.

      0 daripada 1 dijumpai

      Setiap baris resepi kekal dalam sejarah image. Sesiapa boleh baca.

      Cuba

      Mulakan db. Serahkan kata laluan dari db.env, semasa run.

      Laptop anda~/shop

      • Tiada tingkap terbuka

      Bekas (container)

      • Belum ada container

      Pek beku (image)

      • postgres:18-alpine9 layer · 433MB

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

      Semak

      Tabiat selamat, atau bocor?

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

      1 / 5

      Masukkan fail .env dalam .gitignore.

      Masukkan fail .env dalam .gitignore.

      Anda berjaya!

      Kini anda boleh jauhkan rahsia dari image anda.

      Nak tahu lebih (pilihan)

      Env var semasa run masih nampak dalam docker inspect. Secret Compose sampai sebagai fail dalam /run/secrets.

      Di mana cerita ini tak tepat: loker sebenarnya tak di luar. Volume ada di cakera yang sama, atau dalam VM Docker Desktop. Cakera rosak, loker pun hilang. Talian telefon cuma perisian. Env var pun bukan kotak berkunci.

      Misi sebenar

      1. docker history --no-trunc <your-image>
      2. git check-ignore .env

      0 daripada 3 langkah siap · Tanda anda disimpan.