2016-09-22 6 views
0

Nehmen wir an, ich bin in meinem Fedora als reynierpm angemeldet und ich werde ein Docker-Image aus einer Dockerfile erstellen. Dieses Bild enthält eine LAMP-Umgebung. Ich habe eine Apache Virtual Host (VH) Standarddatei, die wie folgt aussieht:Werte für Image-Build für einen Docker-Container festlegen

<VirtualHost *:80> 
    #ServerName www.example.com 

    ServerAdmin [email protected] 
    DocumentRoot /var/www 

    <Directory /var/www> 
     AllowOverride All 
     Require all granted 
    </Directory> 

    ErrorLog /dev/stdout 
    CustomLog /dev/stdout combined 
</VirtualHost> 

Im Rahmen des integrierten Prozesses diese Datei an die richtige Stelle auf dem Bild kopiert wird.

Kann ich den angemeldeten Benutzernamen vom Host abrufen und dynamisch in diesen VH setzen? Am Ende würde Ich mag die folgenden Ergebnisse erhalten:

<VirtualHost *:80> 
    ServerName reynierpm.dev 

    ServerAdmin [email protected] 
    DocumentRoot /var/www 

    <Directory /var/www> 
     AllowOverride All 
     Require all granted 
    </Directory> 

    ErrorLog /dev/stdout 
    CustomLog /dev/stdout combined 
</VirtualHost> 

Ich weiß, dass ich den Wert für den aktuellen Benutzer erhalten kann $(whoami) von bash verwenden, aber wie kann ich es in die VH-Datei auf Docker einfügen/set bauen ?

Dies ist der Inhalt des Dockerfile:

FROM ubuntu:14.04.5 
MAINTAINER Me <[email protected]> 
ARG USER_NAME=unknown 
VOLUME ["/var/www"] 

RUN apt-get update && \ 
    DEBIAN_FRONTEND=noninteractive \ 
    apt-get install -y software-properties-common && \ 
    apt-get update && \ 
    apt-get install -y \ 
     apache2 \ 
     php5 \ 
     php5-cli \ 
     libapache2-mod-php5 \ 
     php5-gd \ 
     php5-json \ 
     php5-mcrypt \ 
     php5-mysql \ 
     php5-xdebug \ 
     php5-curl \ 
     php5-memcached \ 
     php5-mongo \ 
     zend-framework \ 
     mc \ 
     nano 

# Copy default virtual host file. 
COPY /config/apache2_vhost/apache_default /etc/apache2/sites-available/000-default.conf 
COPY run /usr/local/bin/run 
RUN chmod +x /usr/local/bin/run 
RUN a2enmod rewrite 

EXPOSE 80 
EXPOSE 9001 

CMD ["/usr/local/bin/run"] 

UPDATE: Build fehlschlägt, während versuchen, die args

Nach @Elton Vorschlag verwende ich diese Zeile in der run Datei hinzugefügt:

sed -i "s/#ServerName www.example.com/$USER_NAME.dev/g" /etc/apache2/sites-available/000-default.conf 

Und dann versuchen Sie, das Bild wie zu erstellen:

docker build --build-arg USER_NAME=$(whoami) -t dev-php55 . 

aber versagt mit der folgenden Meldung:

Ein oder mehr Build-args [USER_NAME] nicht verbraucht wurde, bauen scheitern.

Was ist los?

Antwort

2

Wenn Sie diesen Wert wollen im Bild fixiert werden, die beste Option ist ein Build-Argument zu verwenden, und in Ihrem Dockerfile einen Text Substitution tun:

FROM ubuntu                                   
ARG USER_NAME=unknown                                 
RUN echo Built by: $USER_NAME > /builder.txt 

Dann wird Ihr whoami geben, wenn Sie bauen:

docker build --build-arg USER_NAME=$(whoami) -t temp . 

die Build-Argument überschreibt die standardmäßig im Dockerfile so Ihr Bild der realen Erbauers Benutzernamen hat:

docker run temp cat /builder.txt                             
Built by: ubuntu 

EDIT:build arguments sind nur als Umgebungsvariablen während des Build-Prozesses verfügbar. Weder die Variable noch der Wert sind im endgültigen eingebauten Bild vorhanden. Sie können also nur den Argumentwert in Build-Anweisungen wie RUN verwenden.

+0

Kannst du einen Blick auf meine Bearbeitung werfen? Vielleicht fehlt mir etwas – ReynierPM

+0

Dieser Fehler bedeutet, dass der Name des Arguments in '--build-arg' nicht mit dem Namen in' ARG' übereinstimmt. –

+0

Ok, aber das möchte ich nicht erreichen. Verstehst du das Hauptproblem, das ich habe? Schauen Sie sich das OP an, vielleicht ist es jetzt besser – ReynierPM

Verwandte Themen