【问题标题】:Serve dockerized ZendFramework2 Application with nginx使用 nginx 服务 dockerized ZendFramework2 应用程序
【发布时间】:2017-06-14 16:53:28
【问题描述】:

我想用 Nginx、Mysql 和 PHP7 Docker 化一个 ZendFramework2 应用程序。

当我运行docker-compose up 时,所有容器都已构建。但是当我想访问localhost:8080 时,虽然default.conf 被我的site.conf 替换,但我得到了nginx 默认页面。重启 nginx 容器并没有改变任何东西。

因为这是我第一次尝试对应用程序进行 docker 化,所以我还想获得有关我的 docker-setup 的反馈

我关注了this 教程,但它的最简单形式也不起作用。

您可以使用我的Example Application 来重现此行为。

提前感谢您的帮助

docker-compose.yml

version: '2'

services:
  db:
    image: mysql:5.7
    restart: always
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ferienhof
      MYSQL_DATABASE: ferienhof
      MYSQL_USER: ferienhof
      MYSQL_PASSWORD: ferienhof

  web:
    depends_on:
      - db
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./src:/code
      - ./resources/site.conf:/etc/nginx/conf.d/default.conf
    links:
      - php
  php:
    build: .
    volumes:
      - ./src:/code
volumes:
    db_data:

用于 php 的 Dockerfile

php.ini 取自github

FROM php:7.1-fpm

RUN apt-get update && apt-get install -y \
    git \
    cron \
    libfreetype6-dev \
    libicu-dev \
    libjpeg62-turbo-dev \
    libmcrypt-dev \
    libpng12-dev \
    libxslt1-dev

# Configure the gd library
RUN docker-php-ext-configure \
  gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/

# Install required PHP extensions
RUN docker-php-ext-install \
  gd \
  intl \
  mbstring \
  mcrypt \
  pdo_mysql \
  xsl \
  zip \
  soap

# Install the 2.4 version of xdebug that's compatible with php7
RUN pecl install -o -f xdebug-2.4.0

COPY resources/php.ini /usr/local/etc/php/

  # Install composer and put binary into $PATH
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/ \
    && ln -s /usr/local/bin/composer.phar /usr/local/bin/composer

# Install phpunit and put binary into $PATH
RUN curl -sSLo phpunit.phar https://phar.phpunit.de/phpunit-old.phar \
    && chmod 755 phpunit.phar \
    && mv phpunit.phar /usr/local/bin/ \
    && ln -s /usr/local/bin/phpunit.phar /usr/local/bin/phpunit

# Install PHP Code sniffer
RUN curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar \
    && chmod 755 phpcs.phar \
    && mv phpcs.phar /usr/local/bin/ \
    && ln -s /usr/local/bin/phpcs.phar /usr/local/bin/phpcs \
    && curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar \
    && chmod 755 phpcbf.phar \
    && mv phpcbf.phar /usr/local/bin/ \
    && ln -s /usr/local/bin/phpcbf.phar /usr/local/bin/phpcbf

资源/site.conf

server {
    server_name php-docker.local;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    listen       80;
    root         /code/public;

    location / {
        index index.php;
        try_files $uri $uri/ @php;
    }

    location @php {
        # Pass the PHP requests to FastCGI server (php-fpm) on 127.0.0.1:9000
        fastcgi_pass   php:9000;
        fastcgi_param  SCRIPT_FILENAME /code/public/index.php;
        include fastcgi_params;
    }
}

【问题讨论】:

  • 认识到我必须将 fastcgi_pass 更改为 php:9000 才能启用链接,但现在 nginx 返回原始 php 文件。好像 php-Container 没有处理这个文件。

标签: php mysql nginx docker docker-compose


【解决方案1】:

我稍微改变了我的 docker-compose。工作文件可以在http://git.schulz.codes/bootstrap/docker-php/tree/master找到

【讨论】:

    【解决方案2】:

    您的 nginx 配置使用 php-docker.local 作为 server_name,但您正在访问名称为 localhost 的站点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2015-12-05
      • 2011-08-17
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多