2017-09-14 74 views
2

我用Docker創建了一個PHP/Apache/MySQL開發環境,並且想要設置我可以在PHP中使用的變量$_SERVER

通常我將配置類似的東西在我的虛擬主機

SetEnv ENV "developement"

有沒有辦法用我的docker_compose.yml文件做呢? 我會在我的docker-compose文件中使用environment: - ENV=developement來嘗試,但它不起作用。

這裏是我的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 

和我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

那'environment'部分看起來很有希望....見文檔:HTTPS:/ /docs.docker.com/compose/environment-variables/#substitution-environment-variables-in-compose-files – ficuscr

+0

是的,這就是我找到關於'environment'的信息的地方,但是我的var沒有出現在$ _SERVER中 – user2993925

+1

應該嗎?請參閱:['getenv'](http://php.net/manual/en/function.getenv.php)...或$ _ENV ...不能誠實地回憶。其他因素可能是可變訂單... EGPCS? – ficuscr

回答

4

考慮以下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 

現在運行使用

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

測試

$ curl localhost/first.php 
TARUN 

$ curl localhost/last.php 
$ 

正如你所看到的唯一FIRST_NAME可以被訪問,因爲我們在Apache配置內幕曝光的相同使用PassEnv指令容器

0

我知道這是一箇舊的線程,然而,另一個解決方案也可能是在你的docker內部組成,你需要刪除ENV前面的「 - 」,然後而不是「=」它需要是「:」。

它最終會這樣看,那麼:

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 

至少它的工作一樣,在第3版