laravel项目的Docker-compose和composer

时间:2019-07-17 16:33:34

标签: docker docker-compose

我正在尝试使用docker(完全是第一次使用)为我的laravel项目构建开发环境。

我已经阅读了文档,至少在我看来,docker-compose.yml文件是最好的选择。

我正在尝试创建一个LEMP env,这是我的撰写文件:

version: "3.1"
services:

    memcached:
      image: memcached:alpine
      container_name: 01dev-memcached

    mysql:
      image: mysql:8.0
      container_name: 01dev-mysql
      working_dir: /application
      volumes:
        - ./:/application
      environment:
        - MYSQL_ROOT_PASSWORD=laravel
        - MYSQL_DATABASE=laravel
        - MYSQL_USER=laravel
        - MYSQL_PASSWORD=laravel
      ports:
        - "8082:3306"

    webserver:
      image: nginx:alpine
      container_name: 01dev-webserver
      working_dir: /application
      volumes:
          - ./:/application
          - ./phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      ports:
       - "8080:80"

    php-fpm:
      build: phpdocker/php-fpm
      container_name: 01dev-php-fpm
      working_dir: /application
      volumes:
        - ./:/application
        - ./phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/7.3/fpm/conf.d/99-overrides.ini

我的nginx.conf文件:

server {
    listen 80 default;

    client_max_body_size 108M;

    access_log /var/log/nginx/application.access.log;


    root /application/public;

    index index.php;

    if (!-e $request_filename) {
        rewrite ^.*$ /index.php last;
    }

    location ~ \.php$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        include fastcgi_params;
    }

}

因为是Laravel应用程序,所以我需要将public文件夹设置为root,所以在我的nginx.conf中,我已经将其设置。

如果我仅用一个public用一个index.php创建一个echo "hello";文件夹,我就可以连接并看到http://localhost:8080上的字符串。

现在,我需要使用composer来安装和管理我的项目,因此我找到了composer映像,并将其添加到services中的docker-compose.yml下:

composer:
      restart: 'no'
      container_name: 01dev-composer
      image: "composer"
      command: install
      volumes:
        - ./:/application

据我对volumes的了解,我将主机绑定到了容器路径,所以它应该指向public文件夹之外,对吗?

如果我运行docker-compose up,我会看到作曲家容器exit with code 1

01dev-composer | Composer could not find a composer.json file in /app
01dev-composer | To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
01dev-composer exited with code 1

我无法连接到它:

docker-compose exec composer install
ERROR: No container found for composer_1

如何在项目中使用作曲家?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

请参见composer Dockerfile

  

WORKDIR / app

此映像的工作目录为/app,也从guide(所有示例安装代码目录)到容器中的/app文件夹。

此外,该错误还告诉您:

  

Composer在/ app中找不到composer.json文件

因此,您需要做的是将代码目录安装到/app并确保首先启动此服务,然后它将在您的源代码目录中生成vendor文件夹:

volumes:
  - ./:/app