2017-09-14 4 views
2

Ich habe eine PHP/Apache/MySQL-Entwicklungsumgebung mit Docker erstellt und möchte eine Variable festlegen, die ich mit $_SERVER in PHP verwenden kann.

Normalerweise werde ich so etwas in meinem virtuellen Host

SetEnv ENV "developement"

Gibt es so zu konfigurieren, eine Möglichkeit, es mit meiner docker_compose.yml Datei zu tun? Ich versuche es mit environment: - ENV=developement in meiner Docker-Compose-Datei, aber es funktioniert nicht. Hier

ist mein Dockerfile

FROM php:5.6-apache 

RUN apt-get update -y && apt-get install -y libpng-dev curl libcurl4-openssl-dev 

RUN docker-php-ext-install pdo pdo_mysql gd curl 

RUN a2enmod rewrite 

RUN service apache2 restart 

und meine docker-compose.yml

version: '2' 

services: 
    webserver: 
    build: ./docker/webserver 
    image: dev_web 
    ports: 
     - "80:80" 
     - "443:443" 
    volumes: 
     - /pathtodev/www:/var/www/html 
    links: 
     - db 
    environment: 
    - ENV=developement 

    db: 
    image: mysql:5.7 
    ports: 
     - "3306:3306" 
    volumes: 
     - ./db:/var/lib/mysql 
    environment: 
     - MYSQL_ROOT_PASSWORD=****** 
     - MYSQL_DATABASE=db_dev 
+0

Das 'environment' Abschnitt sieht vielversprechend .... docs Siehe: https://docs.docker.com/compose/environment-variables/#substituting-environment-variables-in-compose-files – ficuscr

+0

Ja, das ist, wo ich die Informationen über 'Umgebung' gefunden habe, aber meine Var erscheint nicht in' $ _SERVER' – user2993925

+1

Sollte es? Siehe: ['getenv'] (http://php.net/manual/en/function.getenv.php) ... oder $ _ENV ... Kann mich ehrlich nicht erinnern. Andere Faktoren könnten variable Reihenfolge sein ... EGPCS? – ficuscr

Antwort

4

Betrachten Sie die unten Dockerfile

FROM php:5.6-apache 

RUN apt-get update -y && apt-get install -y libpng-dev curl libcurl4-openssl-dev 

RUN docker-php-ext-install pdo pdo_mysql gd curl 

RUN a2enmod rewrite 

RUN service apache2 restart 

RUN echo 'PassEnv FIRST_NAME' > /etc/apache2/conf-enabled/expose-env.conf 
RUN echo '<?php echo $_SERVER["FIRST_NAME"];' > /var/www/html/first.php && echo '<?php echo $_SERVER["LAST_NAME"];' > /var/www/html/last.php 

nun den Behälter laufen mit

docker run -it -e FIRST_NAME=TARUN -e LAST_NAME=LALWANI -p 80:80 4ba2aa50347b 

Testing

$ curl localhost/first.php 
TARUN 

$ curl localhost/last.php 
$ 

Wie Sie das einzige FIRST_NAME zugegriffen werden sehen können, weil wir das gleiche mit PassEnv Direktive in unseren Apache-Konfiguration Insider den Container

0

ausgesetzt Ich weiß, das ist ein alter thread, aber eine andere lösung könnte auch sein, dass in ihrem docker komponieren musst du das "-" vor ENV entfernen und dann anstelle von "=" muss es ":" sein.

Es wird am Ende so aussieht, dann:

version: '2' 

services: 
    webserver: 
    build: ./docker/webserver 
    image: dev_web 
    ports: 
     - "80:80" 
     - "443:443" 
    volumes: 
     - /pathtodev/www:/var/www/html 
    links: 
     - db 
    environment: 
     ENV: developement 

    db: 
    image: mysql:5.7 
    ports: 
     - "3306:3306" 
    volumes: 
     - ./db:/var/lib/mysql 
    environment: 
     - MYSQL_ROOT_PASSWORD=****** 
     - MYSQL_DATABASE=db_dev 

Mindestens es ist wie, dass die Arbeit in der Version 3.

Verwandte Themen