簡體   English   中英

php docker鏈接apache docker

[英]php docker link apache docker

我建造了兩個碼頭工人,一個帶有apache的碼頭工人,一個帶有php5的碼頭工人,我使用docker-compose來啟動。

directoy apache2中的apache2 Dockerfile:

FROM debian:latest
RUN apt-get update && apt-get install -y apache2
ADD test.php /var/www/html

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

和test.php:

<?php
phpinfo();
?>

目錄php中的php5 Dorckerfile:

FROM debian:latest
RUN apt-get update && apt-get install -y php5

泊塢窗,compose.yml:

apache:
    build: ./apache2
    container_name: apache
    ports:
      - "80:80"
    links:
      - "php5"

php5:
    build: ./php
    container_name: php

然后我跑:

docker-compose up

apache2服務器啟動成功。 然后我通過http:// server_ip訪問這個服務器,然后我得到debian的索引。但是當我訪問http://server_ip/test.php時 ,只需要這樣:

<?php
phpinfo();
?>

PHP只是不起作用。我不是為什么。

您可以使用PHP-FPM分離Apache和PHP。 但是,DocumentRoot必須安裝在兩個容器上。

Apache必須能夠在本地(在其容器內)以及PHP-FPM服務器上訪問文件。

我目前正在研究同樣的問題,請看看我的docker-compose.yml

https://github.com/cytopia/devilbox/blob/master/docker-compose.yml

兩個卷(在PHP和apache中)都安裝到/shared/httpd

我會說它不可能作為apache模塊運行php的單獨容器。 我想這就是沃爾夫岡的意思。

如果你想在兩個不同的容器中分離apache和php,你需要運行php作為fpm。
看看這里的靈感: 如何正確地鏈接php-fpm和Nginx Docker容器?

如果你需要運行的Apache和PHP作為apache_mod使用這樣的組合容器: https://github.com/docker-library/php/blob/fec7f537f049aafd2102202519c3ca9cb9576707/5.5/apache/Dockerfile來自: HTTPS://hub.docker。 COM / _ / PHP /

如果你不需要特別需要將Apache與PHP分開,那么你可能會選擇官方的php:5.6-apache圖像 ,它隨Apache一起提供。

例如,您docker-compose.yml可能如下所示:

version: '3'
services:
  web:
    image: php:5.6-apache
    ports:
      - "8080:80" # Map container port 80 to host machine port 8080
    volumes:
      - ".:/var/www/html" # Mount current folder as volume to container at /var/www/html

或者,對於更現實的例子,如果您還需要至少以下之一:

  • 自定義Web根目錄(適用於Laravel,Symfony等)
  • 安裝了其他Apache模塊
  • 安裝了其他PHP擴展

你可能會做更像這樣的事情:

version: '3'
services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:80" # Map container port 80 to host machine port 8080
    environment:
      APACHE_DOCUMENT_ROOT: "/var/www/yourapp.com/public"
    volumes:
      - ".:/var/www/yourapp.com" # Mount current folder as volume to container at /var/www/yourapp.com

然后你的Dockerfile (我們從上面docker-compose.yml引用):

FROM php:5.6-apache

# Declare an environment variable with a default value for changing Apache's document root
# We will override this in docker-compose.yml
ENV APACHE_DOCUMENT_ROOT /var/www/html

# Configure web root
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# Install additional Apache modules
# This example: mod_rewrite & mod_headers
RUN a2enmod rewrite headers

# Install additional PHP extensions
# This example: memcached & mysqli
# For other extensions see official docs:
# https://hub.docker.com/_/php (section: How to install more PHP extensions)
RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev \
    && pecl install memcached-2.2.0 \
    && docker-php-ext-enable memcached \
    && docker-php-ext-install -j$(nproc) mysqli

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM