预期结果
您能否建议如何通过Dockerfile
AWS Elasticbeanstalk 多容器 Docker 应用程序在我的 webroot 中安装 npm 和 composer 依赖项?
现在的情况
我一直在通过 Dockerfile 在 Docker 容器中构建文件,代码如下:
// Dockerfile
...
# npm
WORKDIR /var/www/tmp_html
RUN mkdir -p npm
WORKDIR /var/www/tmp_html/npm
COPY php-app/package.json package.json
RUN npm update && npm install
# composer
... // similar to above
# Switch working directory back to webroot
WORKDIR /var/www/html
部署后,当我通过 ssh 进入实例的php:fpm
容器时,我可以看到以下结构:
root@3f8bf1xc2a78:/var/www# ls
html tmp_html
构建的文件位于 /tmp_html 中,我正尝试将它们移动到 /html。通过我的 Dockerfile 如下:
ONBUILD RUN mv -v ../tmp_html/composer/protected/vendor/* protected/vendor \
&& rm -rf ../tmp_html/composer/protected \
&& mv -v ../tmp_html/composer/* . \
&& mv -v ../tmp_html/npm/* . \
&& rm -rf ../tmp_html
问题
问题是,ONBUILD 步骤不起作用。在 Docker 检查 php:fpm 容器时,我注意到了这一点:“OnBuild”:null。似乎 onbuild 甚至没有运行。/html
和/tmp_html
文件夹中的文件保持不变。
此外,如果我不使用 ONBUILD 命令直接运行命令,则在将 docker push 到 docker 映像存储库时,无法检测到目标位置,并且拒绝让我推送,因此我甚至无法部署。错误是:
mv: target 'protected/vendor' is not a directory
我猜这是因为 elasticbeanstalk 尚未复制捆绑包,因此此时 html 文件夹甚至不可用。
答案1
在临时目录中停止。将文件复制到您需要的镜像中,然后在构建镜像时安装您的 npm 模块和您的 composer 模块。
不确定为什么要将它们放在临时文件夹中然后移动它们?