Peta dunia

 

EN: Read in English

Dunia D5: Hantar & Lindung

docker history bocorkan rahsia

Anda akan belajar: cara rahsia bocor ke dalam layer image, dan cara build secret menghalangnya.

Teks BM belum disemak oleh penutur asli.

Disemak dengan Docker Engine 29 pada 31 Okt 2026

Masalahnya

docker history menu:1.0 senaraikan setiap baris resepi. Dua baris tunjuk rahsia: ENV API_KEY=kk_live_8f2a dan ARG SHOP_TOKEN=tk_9b7c. Transkrip Docker: $ docker history menu:1.0 IMAGE CREATED CREATED BY SIZE COMMENT 66b12b488ce5 3 seconds ago CMD ["cat" "/app/menu.txt"] 0B buildkit.dockerfile.v0 <missing> 3 seconds ago COPY menu.txt /app/menu.txt # buildkit 12.3kB buildkit.dockerfile.v0 <missing> 3 seconds ago ENV API_KEY=kk_live_8f2a 0B buildkit.dockerfile.v0 <missing> 3 seconds ago RUN |1 SHOP_TOKEN=tk_9b7c /bin/sh -c echo "t… 4.1kB buildkit.dockerfile.v0 <missing> 3 seconds ago ARG SHOP_TOKEN=tk_9b7c 0B buildkit.dockerfile.v0 <missing> 9 days ago CMD ["/bin/sh"] 0B buildkit.dockerfile.v0 <missing> 9 days ago ADD alpine-minirootfs-3.22.7-x86_64.tar.gz /… 8.97MB buildkit.dockerfile.v0

Laptop anda~/kedai

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • alpine:3.221 layer · 12.9MB
  • menu:1.03 layer · 12.8MB

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

Kad resepi anda melekat pada pek. docker history tunjuk setiap baris, kepada sesiapa yang pull. Nampak dua rahsia itu?

Teka

Baris 3 resepi salin .env masuk. Baris 4 jalankan rm .env. Adakah rahsia itu dalam image?

Pilih satu jawapan.

Cuba

Jadi detektif. Tunjuk baris penuh dengan --no-trunc, dan cari token itu.

Laptop anda~/kedai

  • Tiada tingkap terbuka

Bekas (container)

  • Belum ada container

Pek beku (image)

  • alpine:3.221 layer · 12.9MB
  • menu:1.03 layer · 12.8MB

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

Tengok

rahsia binaan (build secret): Kunci yang dipinjamkan kepada satu langkah RUN sahaja. Ia tidak masuk ke dalam layer. (rahsia binaan) dipinjamkan kepada satu langkah RUN, kemudian diambil balik. Ia tak pernah masuk ke dalam layer.

Tekan baris yang meminjam rahsia itu.

0 daripada 1 dijumpai

Semak

bash
docker build --secret id=shop_token,env=SHOP_TOKEN -t menu:1.1 .
…
docker history --no-trunc --format '{{.CreatedBy}}' menu:1.1
CMD ["cat" "/app/menu.txt"]
COPY menu.txt /app/menu.txt # buildkit
RUN /bin/sh -c test -n "$SHOP_TOKEN" # buildkit
CMD ["/bin/sh"]
ADD alpine-minirootfs-3.22.7-x86_64.tar.gz / # buildkit
Bina dengan --secret id=shop_token,env=SHOP_TOKEN, kemudian docker history: baris RUN tunjuk test -n tanpa nilai token.

Output sebenar. Baris RUN sebut nama pemboleh ubah, tapi tak pernah nilainya. Token itu kekal dalam kotak rempah berkunci anda.

Semak

Selamat untuk binaan, atau bocor?

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

      Anda berjaya!

      Kini anda boleh cari rahsia yang bocor dan halangnya daripada masuk image.

      Nak tahu lebih (pilihan)

      Ada yang bocor? Batalkan token dulu: ia sudah awam. Kemudian baiki resepi, bina semula dan padam tag lama. BuildKit beri amaran SecretsUsedInArgOrEnv.

      Di mana cerita ini tak tepat: peti sejuk sebenar simpan satu pek. Registry beri salinan sempurna selamanya, dan ia tak pernah cair. Tapi pek tetap boleh basi: lubang baru dijumpai dalam image lama.

      Misi sebenar

      1. docker history --no-trunc YOUR-IMAGE

      0 daripada 3 langkah siap · Tanda anda disimpan.