2017-01-17 3 views
3

volume Ich versuche, docker-compose zu verwenden, um meine php.ini-Datei zu volumieren, so dass ich Änderungen auf meinem lokalen Rechner durchführen kann, um zu sehen, wie es den Host beeinflusst Maschine. Leider war die einzige Möglichkeit, die php.ini-Datei in den Container zu bekommen, direkt während der Erstellung in der Docker-Datei.Docker-Compose wird nicht meine php.ini-Datei

Angehängt ist ein Bild des Containers, das mit den aktuellen Einstellungen läuft.

enter image description here

Mein Dockerfile ist unten:

FROM ubuntu:14.04 
MAINTAINER Joe Astrahan <[email protected]> 

VOLUME ["/var/www"] 


RUN apt-get update && \ 
    apt-get install -y software-properties-common && \ 
    apt-get update && \ 
    apt-get install -y \ 
     apache2 \ 
     curl \ 
     libcurl3 \ 
     libcurl3-dev \ 
     php5 \ 
     php5-cli \ 
     libapache2-mod-php5 \ 
     php5-gd \ 
     php5-json \ 
     php5-ldap \ 
     php5-mysqlnd \ 
     php5-pgsql \ 
     php5-curl \ 
     mysql-client 

COPY config/php.ini /etc/php5/apache2/php.ini 

# install php-5.5.30 
COPY config/install_php-5.5.30.sh /tmp/install_php-5.5.30.sh 
RUN /bin/bash /tmp/install_php-5.5.30.sh 


COPY config/apache_default.conf /etc/apache2/sites-available/000-default.conf 
COPY config/run /usr/local/bin/run 

RUN chmod +x /usr/local/bin/run 
RUN a2enmod rewrite 

#This will allow us to modify files in the container for testing if we need to 
RUN apt-get update && \ 
    apt-get install -y vim 

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

Meine Docker-compose.yml Datei unten:

version: '2' 
services: 
    dblive: 
     image: mysql:5.5.52 
     volumes: 
      - ./db_data_live:/var/lib/mysql 
     restart: always 
     environment: 
      MYSQL_ROOT_PASSWORD: **** 
      MYSQL_DATABASE: **** 
      MYSQL_USER: **** 
      MYSQL_PASSWORD: **** 

    dbdev: 
     image: mysql:5.5.52 
     volumes: 
      - ./db_data_dev:/var/lib/mysql 
     restart: always 
     environment: 
      MYSQL_ROOT_PASSWORD:**** 
      MYSQL_DATABASE: **** 
      MYSQL_USER: **** 
      MYSQL_PASSWORD: **** 

    phpmyadmin: 
     depends_on: 
      - dblive 
      - dbdev 
     image: phpmyadmin/phpmyadmin 
     environment: 
      PMA_ARBITRARY : 1 
     restart: always 
     ports: 
      - "8081:80" 

    web: 
     build: ./ 
     depends_on: 
      - dblive 
      - dbdev 
     volumes: 
      - ./web:/var/www 
      - ./config/php.ini:/etc/php5/apache2/conf.d/custom.ini 
      - ./logs/apache_error.log:/var/log/apache2/error.log 
      - ./logs/apache_access.log:/var/log/apache2/access.log 
      - ./config/apache_default.conf:/etc/apache2/sites-enabled/000-default.conf 
     restart: always 
     ports: 
      - "80:80" 
      - "443:443" 

Ich habe versucht, im Anschluss an die Beratung hier, can't upate php.ini file in Docker container , indem Sie eine custom.ini-Datei erstellen und sie in dieser Ort. Ich habe es wirklich richtig gemacht, denn wenn Sie sich mein Bild ansehen, das ich für phpinfo() angehängt habe, sehen Sie, dass unter zusätzlichen ini-Dateien, die analysiert wurden, meine custom.ini am Ende da ist. Ich habe jedoch einen Test gemacht, indem ich asp_tags = On anstelle von Off gesetzt habe und ich kann nicht. phpinfo() wird immer als aus angezeigt. Siehe mein angehängtes Bild, das es zeigt, obwohl ich meine Konfigurationsdatei geladen habe.

Ich bin nicht einmal sicher, ob es überhaupt irgendwelche der Befehle darin respektiert?

enter image description here

enter image description here

Zusätzliche Dateien Gebrauchte

Run

#!/bin/bash 
set -e 

PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"} 
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/apache2/php.ini 
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/cli/php.ini 
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/apache2/php.ini 
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/cli/php.ini 
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/apache2/php.ini 
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/cli/php.ini 

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND 

install_php-5.5.30.sh

#!/bin/bash 

# install dependencies 
apt-get -y update && \ 
apt-get install -y \ 
    build-essential \ 
    apache2-dev \ 
    libxml2-dev 

# download PHP 5.5.30 source code 
cd /tmp 
curl -fsSL http://php.net/get/php-5.5.30.tar.bz2/from/this/mirror | tar xjf - 
cd php-5.5.30 

# configure build options 
./configure --prefix=/usr \ 
      --with-config-file-path=/etc/php5/apache2 \ 
      --with-config-file-scan-dir=/etc/php5/apache2/conf.d \ 
      --disable-pdo \ 
      --disable-json \ 
      --enable-mbstring \ 
      --with-apxs2 

# compile and install 
NUM_CORES=`cat /proc/cpuinfo | grep processor | wc -l` 
make -j $NUM_CORES 
make install 

# configure extension directory 
echo 'extension_dir="/usr/lib/php5/20121212"' >> /etc/php5/apache2/php.ini 

# cleanup 
rm -rf /tmp/php-5.5.30 /tmp/install_php-5.5.30.sh 

Meine Dateistruktur

enter image description here

+0

Ich möchte darauf hinweisen, dass wenn ich versuche, beim Start des Containers direkt in /etc/php/apache2/php.ini zu schreiben, es in einer Art Endlosschleife stecken bleibt? (Im Grunde startet es nie und der Container wird immer wieder neu gestartet) –

Antwort

4

fand ich die Antwort, legte eine Datei custom.php.ini im Verzeichnis config aufgerufen (wenn Sie meine Verzeichnisstruktur folgen).

die Volumina wie dies in meinem Beispiel Set ...

volumes: 
      - ./web:/var/www 
      - ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini 

standardmäßig den Scan-Verzeichnis für zusätzliche PHP-Dateien in dem Verzeichnis conf.d aussehen wird. Diese Dateien überschreiben die Einstellungen der Haupt php.ini. Ich habe das mit der Option asp_tag getestet, indem ich es ein- und ausgeschaltet habe. Es funktioniert gut, solange Sie das folgende tun.

Der Trick, diese Arbeit zu machen, ist docker-compose down statt docker-compose kill

Dies entfernt die Container und ihre Cache-Dateien zu verwenden. PHP lädt die Konfigurationsdatei nur einmal beim Booten und den anderen Dateien, so dass die php.ini oder die benutzerdefinierte Datei geändert werden muss, nachdem dieses Andockfenster erforderlich ist, um die Änderung zu erzwingen.

Verwandte Themen