2016-06-19 15 views
26

Jeżeli ustawić zmienną środowiskową, powiedzmy ENV ADDRESSEE=world i chcę, aby użyć go w skrypcie punktu wejścia połączonego na stałe ciąg jak:Jak używać zmiennej środowiskowej Docker w tablicy ENTRYPOINT?

ENTRYPOINT ["./greeting", "--message", "Hello, world!"] 

z world jest wartość varible środowiska, jak to zrobić Zrób to? Próbowałem używać "Hello, $ADDRESSEE", ale to nie wydaje się działać, ponieważ dosłownie bierze $ADDRESSEE.

Odpowiedz

53

Używasz exec form z ENTRYPOINT. W przeciwieństwie do powłoki w postaci powłoki, wykonanie exec z nie wywołuje powłoki poleceń. Oznacza to, że normalne przetwarzanie powłoki nie ma miejsca. Na przykład ENTRYPOINT [ "echo", "$HOME" ] nie dokona podstawienia zmiennych w $ HOME. Jeśli chcesz przetworzyć powłokę, użyj albo powłoki albo wykonaj bezpośrednio powłokę, na przykład: ENTRYPOINT [ "sh", "-c", "echo $HOME" ].
Podczas korzystania z formularza exec i wykonanie powłoki bezpośrednio, jak w przypadku o formie muszli, jest to powłoka, która robi zmienną ekspansję środowiska, nie dokowanym. (Od Dockerfile reference)

W twoim przypadku, użyłby kształt muszli

ENTRYPOINT ./greeting --message "Hello, $ADDRESSEE\!" 
+1

Jest to bardzo przydatna rada, że ​​nie widziałem w żadnym z ćwiczeń, które przeczytałem. – ChrisGuest

+1

'ENTRYPOINT java -jar /dockertest.jar -Djava.security.egd = file:/dev /./ urandom -Dserver.port = $ port' podczas gdy' ENV port = 123'. Port ENV nie został rozwiązany. Jakieś pomysły, dlaczego? – xetra11

-2

Thanks I wstrzykiwanie przez obrót adresu iP do aplikacji java wewnątrz pojemnika Döcker z pliku Döcker z:

ENTRYPOINT ["sh", "-c", "/usr/bin/java -cp /usr/share/tag/container-test.jar -DseleniumHubHost=$SELENIUM_HUB org.testng.TestNG /usr/share/tag/basic-flow-module.xml"] 

jak wspomniałeś jest powłoka, która robi varibable egzekucja

dzięki

+0

Proszę nie dodawać odpowiedzi, aby podziękować –

Powiązane problemy