Prostym powodem jest to, że wartość tajemnicy jest widoczna dla każdego z obrazem po prostu uruchamiając na niej history
.
Weź ten przykładowy plik Döcker:
FROM alpine
ARG secret
RUN echo "${secret}"
(ładne i proste, tak aby pokazać, jak można użyć w tajemnicy.)
następnie budujemy to $ docker build --build-arg secret=S3CR3T - < Dockerfile
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM alpine
---> 13e1761bf172
Step 2 : ARG secret
---> Running in 695b7a931445
---> 5414c15a1cb6
Removing intermediate container 695b7a931445
Step 3 : RUN echo "${secret}"
---> Running in c90cf0d1414b
s3cr3t
---> f2bcff49ac09
Removing intermediate container c90cf0d1414b
Successfully built f2bcff49ac09
a przykładem jak zdobyć "tajne" z powrotem (poszukaj |1 secret=
w pierwszym wierszu):
$ docker history f2bcff49ac09
IMAGE CREATED CREATED BY SIZE COMMENT
f2bcff49ac09 8 seconds ago |1 secret=S3CR3T /bin/sh -c echo "${secret}" 0 B
5414c15a1cb6 8 seconds ago /bin/sh -C#(nop) ARG secret 0 B
13e1761bf172 6 months ago /bin/sh -C#(nop) ADD file:614a9122187935fccf 4.797 MB
ten ma miejsce w przypadku, gdy obraz został utworzony lokalnie lub pobrany z rejestru.
Jeśli twoim celem jest, aby zachować w tajemnicy build-time z pojemnika bieżącą następnie używając ARG ma pomóc - rozważ to:
$ docker run --rm -ti f2bcff49ac09 sh
/# env
HOSTNAME=7bc772fd0f56
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
$ # Note no secret in the above output
Po wpisaniu ich w terminalu w postaci zwykłego tekstu? –
Czy to też ma zastosowanie do zapisywania pliku w zmiennej środowiskowej i przekazywania jej przez zmienne env? –
Myślę, że zapisanie pliku jest w porządku. Niektóre osoby umieszczają swoje klucze (takie jak AWS) w '.bashrc', więc są one ładowane w każdej sesji bash. Myślę, że ta uwaga odnosi się do 'budowania dockera --build-arg param = ...' –