2015-12-31 22 views
26

Próbuję uruchomić skrypt podczas mojego procesu budowania w pliku Dockerfile. Ale to nie wydaje się działać.Uruchamianie skryptu w Dockerfile

Próbowałem w ten sposób:

FROM php:7-fpm 
ADD bootstrap.sh/
ENTRYPOINT ["/bin/bash", "/bootstrap.sh"] 

Również w ten sposób:

FROM php:7-fpm  
ADD bootstrap.sh/
RUN bash -c "/bootstrap.sh" 

A także bu wykonywania mojego biegu pojemnik:

docker exec symfony /bin/bash -c "/bootstrap.sh" 

Nic nie wydaje się działać.

Czy wiesz, jak to zrobić?

+0

Czy nazwa pliku są prawidłowe? –

+0

Tak, nazwa pliku jest poprawna – Kevin

+0

Czy 'bootstarp.sh' ma ustawiony zestaw bitów? – jwodder

Odpowiedz

34

RUN i ENTRYPOINT to dwa różne sposoby na wykonanie skryptu.

RUN oznacza, że ​​tworzy on kontener pośredni, uruchamia skrypt i zatrzymuje nowy stan tego kontenera na nowym obrazie pośrednim. Skrypt nie zostanie uruchomiony po tym: twój ostateczny obraz powinien odzwierciedlać wynik tego skryptu.

ENTRYPOINT oznacza, że ​​twój obraz (który jeszcze nie uruchomił skryptu) utworzy kontener i uruchomi ten skrypt.

W obu przypadkach skrypt należy dodać, a RUN chmod +x /bootstarp.sh to dobry pomysł.

Należy również rozpocząć z shebang (jak #!/bin/sh)

Zważywszy skrypt (KevinRaimbaud/docker-symfony/docker/php/bootstarp.sh: kilka git config --global poleceń), najlepiej byłoby do uruchomienia tego skryptu raz w Dockerfile, ale upewniając się, aby użyć prawo użytkownika (globalny plik konfiguracyjny jest git% HOME%/gitconfig, który domyślnie jest jedna/root).

Dodaj do your Dockerfile:

RUN /bootstart.sh 

Następnie podczas uruchamiania kontenera sprawdź zawartość /root/.gitconfig, aby potwierdzić uruchomienie skryptu.

+3

Co więcej, mógłbyś mieć na myśli 'bootstrap.sh' zamiast' bootstarp.sh': zobacz http://stackoverflow.com/a/1254561/6309 – VonC

+0

Cool! Działa bardzo dobrze z RUN /bootstrap.sh – Kevin

+0

The shebang na pierwszej linii zrobił to dla mnie, dzięki! :) – GDICommander

14

spróbować stworzyć skrypt ADD polecenia i specyfikacji katalogu działa tak („skrypt” jest nazwą skryptu i /root/script.sh jest gdzie chcesz go w pojemniku, może to być inna ścieżka:

ADD script.sh /root/script.sh 

w tym przypadku ADD musi przyjść przed CMD, jeśli masz jeden BTW to fajny sposób na importowanie skryptów do dowolnego miejsca w pojemniku z komputera hosta

w miejscu

on powinien automatycznie uruchomić skrypt

Można również określić WORKDIR jako /root, następnie you'l zostać automatycznie umieszczone w katalogu głównym przy starcie pojemnik

Powiązane problemy