我遇到了一个与Docker Composer相关的非常奇怪的问题。关键是要在不同的PHP版本上运行的Composer会安装不同版本的源代码。在我的特定情况下,项目的composer.json
要求"doctrine/orm":"2.5"
,而该声明又被声明为PHP 5 compatible。而且,如果我在本地PHP 7 CLI解释器上运行composer install
,它将安装仅PHP7兼容版本的代码树,并且由于Doctrine代码具有类常量可见性修饰符和函数返回类型,我得到了很多E_PARSE。如果我在基于composer install
的容器中运行php:5-apache-jessie
,则一切正常(除了以下某些问题),项目成功运行。
那么,看来我们不应该使用本地解释器在项目中获取正确的源。让我们在容器内运行composer。当我手动运行它时,会出现关于不以root身份运行Composer的警告,并且我们拥有一个不好的root拥有的目录。如果我们执行到容器中,由于sudo -u www-data -c 'composer install'
用户没有登录,我们仍然无法运行www-data
之类的东西。我不能只添加RUN composer install
,因为在使用docker-compose
运行映像时,在构建映像时还没有安装卷。
我认为理想情况下,我们可以以主机用户身份运行所有容器命令。但是,当我尝试在Dockerfile中使用USER
指令将其设置为我的UID时,容器甚至没有启动。
因此,问题是:在Docker容器中运行PHP项目时,应该使用什么工作流程来拥有正确的(与实际服务器环境相关的)版本的Composer依赖项?