【问题标题】:Docker - how to set up Apache + PHP in docker-compose.ymlDocker - 如何在 docker-compose.yml 中设置 Apache + PHP
【发布时间】:2017-01-02 08:15:58
【问题描述】:

我用它来为 PHP 设置 nginx:

nginx:
    image: nginx:latest
    ports:
        - 8080:80
    volumes:
        - ./code:/code
        - ./site.conf:/etc/nginx/conf.d/site.conf
    links:
        - php
php:
    image: php:7-fpm
    volumes:
        - ./code:/code

但是 Apache 呢?如何在 docker-compose.yml 中设置 Apache + PHP?

关注这个guide:

version: '2'

services:
  php:
    build: php
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./php/www:/var/www/html

错误:

ERROR: In file './docker-compose.yml' service 'version' doesn't have any configuration options. All top level keys in your docker-compose.yml must map to a dictionary of configuration options.

有什么想法吗?我在 Xubuntu 16.04 上。

编辑:

在设法将 docker-compose 升级到 1.9 后,我尝试使用以下文件:

version: '2'
services:
    php:
        build: php
        expose:
            - 9000
        volumes:
            - ./php/www:/var/www/html

    apache2:
        image: webdevops/apache:latest
        args:
            - PHP_SOCKET=php:9000
        volumes:
            - ./php/www:/var/www/html
        ports:
            - 80:80
            - 443:443
        links:
            - php

错误:

$ sudo docker-compose up -d
Building php
ERROR: Cannot locate specified Dockerfile: Dockerfile

Docker 就是这么痛苦!

任何想法如何解决这个问题?

【问题讨论】:

    标签: php apache docker docker-compose ubuntu-16.04


    【解决方案1】:

    我会选择 webdevops dockerized apache,因为它配置简单:

    version: '2'
    services:
        php:
            build: php
            expose:
                - 9000
            volumes:
                - ./php/www:/var/www/html
    
        apache2:
            image: webdevops/apache:latest
            args:
                - PHP_SOCKET=php:9000
            volumes:
                - ./php/www:/var/www/html
            ports:
                - 80:80
                - 443:443
            links:
                - php
    

    【讨论】:

    • 谢谢。我刚刚尝试过,但我得到了同样的错误ERROR: In file './docker-compose.yml' service 'version' doesn't have any configuration options. All top level keys in your docker-compose.yml must map to a dictionary of configuration options.
    • 看起来你的 docker compose 版本低于 1.6。 Docker compose 版本 2 仅从 1.6 docker compose 开始可用。检查版本docker-compose --version
    • 对于以后遇到此问题的任何人,Compose file versiondocker-compose 版本不匹配,例如version: '2' 对应于docker-compose 1.6.0+
    • 我收到此错误:“services.apache2 不支持的配置选项:'args'”
    【解决方案2】:

    由于上面的示例不起作用,这里有一个不同的方法: docker-compose.yml

    version: '3.1'
    
    services:
      php:
        image: php:7.4-apache
        ports:
          - 80:80
        volumes:
          - ./php/www:/var/www/html/
    

    启动服务器

    docker-compose up
    

    【讨论】:

      【解决方案3】:
      1. 我们需要在当前路径下新建文件夹/php/www

      2. 在php文件夹下创建一个文件另存为“Dockerfile”,其中包含如下不带引号

      "来自 php:5.6-apache 运行 docker-php-ext-install mysqli"

      1. 将 docker-compose.yml 文件复制到“php”文件夹所在的当前文件夹中。

      2. 在www文件夹(/php/www/index.php)下创建示例文件“index.php”

      3. 在命令提示符下运行 docker-compose up -d

      4. 打开浏览器输入“localhost”就可以看到你的示例文件结果了。

      注意:以上步骤按照上面提到的docker-compose.yml文件。

      【讨论】:

      • 不建议使用2个容器?,一个用于apache,一个用于php?
      【解决方案4】:

      您可以查看this 问题。 如果你使用 build 而不是 image,那么你需要“Dockerfile”。 Dockerfile 将用作构建镜像的配置文件。

      您可能会错过指南中的部分内容,您应该在其中创建文件,名称为“Dockerfile”inside directory“php”。目录“php”必须位于与您的“docker-compose.yml”相同的目录中。在“docker-compose.yml”中有这一行。

      build: php
      

      该行的意思是,该配置文件(默认情况下:“Dockerfile”)位于目录“php”中。所以你应该在里面创建目录“php”和文件“Dockerfile”。

      这是来自your guide 的“Dockerfile”。

      FROM php:5.6-apache
      
      RUN docker-php-ext-install mysqli
      

      docker-compose.yml reference 第 2 版

      Dockerfile reference

      【讨论】:

        【解决方案5】:

        我找到了一种动态配置端口和其他参数的优雅方法:在 apache2 的配置文件中,您可以引用环境变量。

        #/etc/apache2/ports.conf
        # If you just change the port or add more ports here, you will likely also
        # have to change the VirtualHost statement in
        # /etc/apache2/sites-enabled/000-default.conf
        #APACHE_HTTP_PORT_NUMBER:80
        #APACHE_HTTPS_PORT_NUMBER:443
        
        Listen ${APACHE_HTTP_PORT_NUMBER}
        
        
        <IfModule ssl_module>
            Listen ${APACHE_HTTPS_PORT_NUMBER}
        </IfModule>
        
        <IfModule mod_gnutls.c>
            Listen ${APACHE_HTTPS_PORT_NUMBER}
        </IfModule>
        

        您可以在 Dockerfile 或 docker-compose.yml 中设置变量

        【讨论】:

          【解决方案6】:

          您可以使用不同的 Dockerfile 设置目录并在每个服务中声明:

          ...
              image: php:custom
              build:
                context: .
                dockerfile: ./dockerfiles/Dockerfile-php
          ...
          

          【讨论】:

            【解决方案7】:

            我为 PHP 开发人员创建了一个 PHP、APACHE、MYSQL 和 PHPMYADMIN 的工作示例。如果您需要原始的老式工作方式,您可能会发现它很有用。请注意,我的网站使用端口 8080,PHPMyAdmin 使用端口 8081。您可以随意更改这些。

            version: '3.8'
            
            
            services:
            
            
             php-apache-environment:
            container_name: php-apache
            image: php:7.4-apache
            volumes:
              - ./php/src:/var/www/html/
            ports:
              - 8080:80
              db:
            image: mysql
            command: --default-authentication-plugin=mysql_native_password
            container_name: mysql
            environment:
              MYSQL_ROOT_PASSWORD: admin
              MYSQL_DATABASE: ezapi
              MYSQL_USER: root
              MYSQL_PASSWORD: password
            ports:
              - "6033:3306"
            volumes:
              - dbdata:/var/lib/mysql
            
            
            phpmyadmin:
            image: phpmyadmin/phpmyadmin
            container_name: phpmyadmin
            links:
              - mysql
            environment:
              PMA_HOST: mysql
              PMA_PORT: 3306
              PMA_ARBITRARY: 1
            restart: always
            ports:
              - 8081:80
            volumes:
            
            
             dbdata:
            

            【讨论】:

              猜你喜欢
              • 2022-09-29
              • 1970-01-01
              • 1970-01-01
              • 2021-01-26
              • 1970-01-01
              • 2018-07-06
              • 1970-01-01
              • 2016-08-21
              • 2022-01-24
              相关资源
              最近更新 更多