Chcę utworzyć obraz dokera, który działa jako wykonywalna, dla której użytkownik przekazuje token jako zmienna środowiska. Executable ma sub polecenia, które użytkownik powinien przejść przez dokerów CMD (pomyśl o Git z uwierzytelnianiem przez Env). Jednak dokik nie dołącza CMD do punktu wstępnego. Odpowiednia część mojego Dockerfile wygląda tak:

ENTRYPOINT ["/bin/sh", "-c", "/usr/bin/mycmd --token=$MY_TOKEN"]
CMD ["pull", "stuff"]

Więc jeśli ten pojemnik jest wykonywany bez nadpisywania CMD i {X0}} jako zmienną My_Token, spodziewałem się

mycmd --token=secret pull stuff

Do wykonania. Jeśli użytkownik uruchamia pojemnik z nadpisaniem, np.

docker run -it -e MY_TOKEN=secret myimage push junk

Oczekiwałbym

mycmd --token=secret push junk

Do wykonania. Jak wspomniano powyżej, jednak wykonuje się tylko mycmd --token=secret, CMD jest ignorowany - bez względu na to, jeśli go zastąpi podczas startu lub ustawić go w Dockerfile.

19
feob 17 luty 2017, 15:37

2 odpowiedzi

Najlepsza odpowiedź

Z składniami /bin/sh -c "script", cokolwiek po argumencie -c staje się argumentem do skryptu. Możesz dotrzeć do nich za pomocą $0 i $@ jako część / skrypt bin / sh:

ENTRYPOINT ["/bin/sh", "-c", "exec /usr/bin/mycmd --token=$MY_TOKEN $0 $@"]
CMD ["pull", "stuff"]

Należy pamiętać, że można również zmienić swój punkt składowy, aby być skryptem powłoki dodany do obrazu, który działa exec /usr/bin/mycmd --token=$MY_TOKEN "$@" i wykonaj ten skrypt powłoki za pomocą składni Docker's Exec:

ENTRYPOINT ["/entrypoint.sh"]
15
BMitch 23 luty 2017, 14:34

Jak określono W dokumentacji dokującej określając punkt składowy, który wywołuje powłoka (w ten sposób nie w postaci powłoki, ale exec jeden). Parametry są przekazywane do powłoki (a zatem ignorowane); tylko polecenie w sprawach powłoki. Zobaczysz swój problem rozwiązany po włączeniu telefonu EnterPoint do:

ENTRYPOINT ["usr/bin/mycmd", "--token=$MY_TOKEN"]

Wywołanie powłoki w punkcie wstępnym jest czymś w dużym stopniu zniechęcony, a precyzyjnie tylko przydatne, gdy chcesz uniknąć użytkownikom obrazu dołączyć niestandardowe parametry do punktu wstępnego.

Do zobaczenia w interwebach! :)

7
David González Ruiz 24 luty 2017, 08:26