如何通过 Dockerfile 在 AWS Elasticbeanstalk 多容器 Docker 应用上安装 npm 和 composer 依赖项?

如何通过 Dockerfile 在 AWS Elasticbeanstalk 多容器 Docker 应用上安装 npm 和 composer 依赖项?

预期结果

您能否建议如何通过DockerfileAWS 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 模块。

不确定为什么要将它们放在临时文件夹中然后移动它们?

相关内容