Docker-compose:通过composer在应用程序文件夹之外的卷中安装php库

问题描述 投票:0回答:1

我想通过composer在app目录之外(在/var/www/lib中)安装一个php库,因为app目录是我的DOCUMENT_ROOT并且是public。另外,我想在本地查看和编辑此目录中的composer.json 文件,因此我在 /var/www/lib 创建了一个卷,但安装后为空。

我在 docker-compose.yml 中创建一个卷:

volumes:
      - ./app:/var/www/html
      - ./lib:/var/www/lib <==

我在 php/Dockerfile 中安装了 Composer 和库:

...
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN mkdir /var/www/lib && cd /var/www/lib && composer require phpoffice/phpspreadsheet

当我执行 docker-compose up 时没有显示错误,但容器内的目录 /var/www/lib 是空的,并且在我的本地目录中也是空的。

我一直在谷歌搜索,并尝试通过 docker-compose.yml 中的命令安装该库:

command: sh -c "cd /var/www/lib && composer require phpoffice/phpspreadsheet"

但是当我尝试启动它时,我的 php 容器退出了。我在 Docker Desktop 中没有看到任何错误: container log

  • 我做错了什么?

  • 通过命令安装库是最好的方法吗?

  • 有没有办法通过 Dockerfile 在 docker-compose 卷中安装库?

注意:如果我通过

Dockerfile
将库安装在应用程序目录中,则安装是正确的。 Composer 在
/var/www/html
中创建了composer.json 文件和vendor 目录,但我不希望在
/var/www/html
中包含vendor 目录,并且我想在本地查看composer.json。

docker docker-compose composer-php
1个回答
0
投票

嗯,你应该尝试更新 Dockerfile,如下所示:


    RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    RUN mkdir -p /var/www/lib
    WORKDIR /var/www/lib

还可以尝试以这种方式更改您的

yml
文件挂载卷:

    volumes:
      - ./app:/var/www/html
      - ./lib:/var/www/lib

最后尝试用这个

docker-compose run php sh -c "composer require phpoffice/phpspreadsheet"
运行你的容器,并在运行过程中检查容器日志。

© www.soinside.com 2019 - 2024. All rights reserved.