繁体   English   中英

Laravel与Docker-Compose

[英]Laravel with Docker-Compose

我正在尝试使用Docker为Laravel应用创建一个PHP,Apache,MySQL映像。 这是我的第一个Docker应用。

当运行docker-compose up -d ,我在浏览器中收到以下错误:

在此处输入图片说明


这是我的docker-compose.yml文件:

version: "3"
services:

webserver:
    build: 
    context: ./bin/webserver
    container_name: 'webserver'
    restart: 'always'
    ports:
    - "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"
    - "${HOST_MACHINE_SECURE_HOST_PORT}:443"
    links: 
    - mysql
    volumes: 
    - ${DOCUMENT_ROOT-./www}:/var/www/html
    - ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
    - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
    - ${LOG_DIR-./logs/apache2}:/var/log/apache2
    networks:
    - app-network

mysql:
    build: ./bin/mysql
    container_name: 'mysql'
    restart: 'always'
    ports:
    - "${HOST_MACHINE_MYSQL_PORT}:3306"
    volumes: 
    - ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql
    - ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql
    environment:
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    MYSQL_DATABASE: ${MYSQL_DATABASE}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
    - app-network

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: 'phpmyadmin'
    links:
    - mysql
    environment:
    PMA_HOST: mysql
    PMA_PORT: 3306
    PMA_USER: ${MYSQL_USER}
    PMA_PASSWORD: ${MYSQL_PASSWORD}
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
    - '8080:80'
    volumes: 
    - /sessions
    networks:
    - app-network

networks:
    app-network:
        driver: bridge

volumes:
    dbdata:
        driver: local

这是我的.env文件:

DOCUMENT_ROOT=./vbs-master/public
VHOSTS_DIR=./config/vhosts
APACHE_LOG_DIR=./logs/apache2
PHP_INI=./config/php/php.ini
MYSQL_DATA_DIR=./data/mysql
MYSQL_LOG_DIR=./logs/mysql

HOST_MACHINE_UNSECURE_HOST_PORT=80
HOST_MACHINE_SECURE_HOST_PORT=443

HOST_MACHINE_MYSQL_PORT=3306

MYSQL_ROOT_PASSWORD=rootroot
MYSQL_USER=root
MYSQL_PASSWORD=rootroot
MYSQL_DATABASE=dockertest

这是我的bin / webserver / Dockerfile:

FROM php:5.6-apache

RUN apt-get -y update && apt-get upgrade -y

# Install tools && libraries
RUN apt-get -y install --fix-missing apt-utils nano wget dialog \
    build-essential git curl libcurl3 libcurl3-dev zip \
    libmcrypt-dev libsqlite3-dev libsqlite3-0 mysql-client \
    zlib1g-dev libicu-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    && rm -rf /var/lib/apt/lists/*

# Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# PHP5 Extensions
RUN docker-php-ext-install curl \
    && docker-php-ext-install tokenizer \
    && docker-php-ext-install json \
    && docker-php-ext-install mcrypt \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install pdo_sqlite \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-ext-install -j$(nproc) intl \
    && docker-php-ext-install mbstring \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && pecl install xdebug-2.5.5 && docker-php-ext-enable xdebug \
    && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/php.ini

# Enable apache modules
RUN a2enmod rewrite headers

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

文件目录树:

在此处输入图片说明


我的config / vhosts / default.conf文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/html"
    ServerName localhost
    <Directory "/var/www/html/">
        AllowOverride all
    </Directory>
</VirtualHost>

您需要设置为DOCUMENT_ROOT=./vbs-master/ ,因为否则您的容器只能访问公用文件夹,但是Laravel项目需要访问父目录。

您需要更改Apache配置,然后在/var/www/html/public查找index.php。

正如@thiago所建议的,您需要将所有应用程序都安装到容器中,因此请按以下步骤更改webserver服务:

webserver:
    build: 
    context: ./bin/webserver
    container_name: 'webserver'
    restart: 'always'
    ports:
    - "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"
    - "${HOST_MACHINE_SECURE_HOST_PORT}:443"
    links: 
    - mysql
    volumes: 
    - ${APP_ROOT-./app}:/var/www/html # Here you may mount the root project of your application
    - ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
    - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
    - ${LOG_DIR-./logs/apache2}:/var/log/apache2
    networks:
    - app-network

并将其添加到您的.env文件

APP_ROOT=./vbs-master

最后但并非最不重要,点你DocumentRootpublic文件夹,请更改您config/vhosts/default.conf文件

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/html/public"
    ServerName localhost
    <Directory "/var/www/html/public">
        AllowOverride all
    </Directory>
</VirtualHost>

注意 :在运行应用程序之前,请确保已执行composer install

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM