2016-09-28 2 views
1

ich eine ziemlich einfache Dockerfile für eine Go App haben:Docker Golang onbuild benutzerdefinierte Aktion bei Docker Lauf

FROM golang:onbuild 
EXPOSE 5000 5001 

Nun, wenn ich es laufen (nicht beim Bau das Bild!) Ich möchte einen Wert in sich ändern eine HTML-Datei, die statisch geliefert wird, möglicherweise unter Verwendung von sed, um eine Umgebungsvariable zu verwenden, die vorher mit -e für docker run angegeben wurde. Wie kann ich das machen? Wenn Sie

#!/bin/env bash  
if [[ "$myenvvar" == 'myvalue' ]]; then 
    # sed your file here 
else 
    #don't do that 
fi 

:

Antwort

1

Sie können so etwas wie dies versuchen:

FROM golang:onbuild 
COPY ./docker-entrypoint.sh/

EXPOSE 5000 5001 
ENTRYPOINT ["/docker-entrypoint.sh"] 

Hinweis: Sie müssen irgendwo in den Behälter Einstiegspunkt Datei mit sed-Skript kopieren (done on line 2)

und docker- entrypoint.sh mit Ihrem sed Skript

# execute sed only **if variable exists** 
sed -ri "s/<title>.*/<title>$ENVIRONMENT_VARIABLE</title>/" /path_to_html_file/index.html 

- einfaches Beispiel einer Ersatzzeile mit neuem Titel (übergeben in run als env. Variable) in index.html Datei

Hinweis: Denken Sie daran, sed nur auszuführen, wenn die Umgebungsvariable @STLMikey angezeigt wurde.

und laufen Docker-Container mit $ENVIRONMENT_VARIABLE

zB:

docker run -d -t -i -e ENVIRONMENT_VARIABLE='New website title' --name=container_name IMAGE_NAME 
1

Eine Option ist die --entrypoint Option während der Docker Lauf zu verwenden:

docker run --entrypoint /some/sh/script.sh <imagename> 

wo script.sh eine Datei innerhalb Containers ist, und enthält so etwas wie Wenn Sie den Einstiegspunkt zur Laufzeit nicht überschreiben möchten, sollten Sie die Optionen CMD oder ENTRYPOINT in Ihrer Dockerfile verwenden.