我想通过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 中没有看到任何错误:
我做错了什么?
通过命令安装库是最好的方法吗?
有没有办法通过 Dockerfile 在 docker-compose 卷中安装库?
注意:如果我通过
Dockerfile
将库安装在应用程序目录中,则安装是正确的。 Composer 在 /var/www/html
中创建了composer.json 文件和vendor 目录,但我不希望在/var/www/html
中包含vendor 目录,并且我想在本地查看composer.json。
嗯,你应该尝试更新 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"
运行你的容器,并在运行过程中检查容器日志。