使用 dockerfile 安装 Composer

2023-12-25

我对 docker 还很陌生,我尝试在 Dockerfile 中自动执行 Composer install,但在安装时似乎无法 cd 进入我的应用程序,出了什么问题?或者也许还有另一种更好的方法来做到这一点?

我的 docker-compose.yml

version: "3.1"
services:

    app:
      image: nginx:alpine
      container_name: app
      working_dir: /application
      volumes:
          - ./Projects/app:/application/app
          - ./Docker/nginx/app.conf:/etc/nginx/conf.d/app.conf
      ports:
          - "8080:8080"

    php-fpm-app:
      build: Docker/php-fpm-app
      container_name: php-fpm-app
      working_dir: /application
      volumes:
          - ./Projects:/application
          - ./Docker/php-fpm-app/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini

我的 Dockerfile

FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

RUN mkdir -p /var/www/.composer \
    && chown -R www-data:www-data /var/www/.composer

USER www-data

RUN cd /application/app; composer install

我运行此命令后的输出:

docker-compose up -d

Step 6/6 : RUN cd /application/app; composer install
 ---> Running in ac53e653af46
/bin/sh: 1: cd: can't cd to /application/app
Composer could not find a composer.json file in /application
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
ERROR: Service 'php-fpm-app' failed to build: The command '/bin/sh -c cd /application/app; composer install' returned a non-zero code: 1

如果我尝试从 Dockerfile 中删除最后一行,一旦它启动并运行,如果我运行以下命令:

docker-compose exec --user www-data php-fpm-app bash -c 'cd /application/app && 作曲家安装'

它有效,我不明白为什么我不能用我的 Dockerfile 做到这一点。

===========================Finally我找到了一种执行脚本的方法,但看不到输出,因此如果脚本持续很多秒/分钟,我将不知道它何时完成。

ADD ./setup.sh /setup.sh
RUN chmod +x /setup.sh
CMD ["sh", "/setup.sh"]

我决定在脚本全部启动并运行后手动执行它

sh ./setup.sh

您不应该在 Dockerfile 中运行composer install。它将失败,因为您尚未从本地创建/同步卷到容器。因此,包括composer.json在内的所有文件都不会放置在/var/www/html下。

您可以做的就是在服务内的 docker-compose.yaml 文件中添加 1 行(命令),例如:

services:
  api-php-fpm:
    build: ./docker/php-fpm
    command: sh -c "composer install"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 dockerfile 安装 Composer 的相关文章

随机推荐

  • 对 Quarkus / Tech doku 关于 Quarkus 测试引擎的基于属性的测试支持

    我们有一个 Quarkus 项目正在生产中 它运行良好 但由于数据结构和业务逻辑的高度复杂性 测试是一场噩梦 我们想在我们的项目中添加基于属性的测试 但到目前为止 我还没有找到支持 Quarkus 的 Java PBT 测试库 我已经尝试过
  • JavaScript 中的异步函数是什么? JavaScript 中的“异步”和“等待”是什么?

    本问答旨在明确回答以下问题 JavaScript 中的异步函数是什么 我们何时以及如何使用它们 什么是async awaitJavaScript 中的关键字以及它们与异步函数有何关系 要遵循答案 需要满足以下先决条件 了解 JavaScri
  • 更改 Compass/Webby 中生成的 CSS 文件的输出目录?

    我希望生成的 css 文件位于 output css 目录而不是 stylesheets 目录中 我该怎么做呢 我已经尝试过 Compass configuration do config config project path File
  • Java 泛型? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 多年来 我看到很多人使用 泛型 这个
  • 用于区分枚举类和常规枚举的 C++11 类型特征

    我正在编写一个类似于 boost promote 但适用于 C 11 的升级模板别名 这样做的目的是避免从变量函数检索参数时出现警告 例如 template
  • 如何从可扩展列表视图中知道哪个复选框被选中并获取其信息(Android)

    我正在开发一个 Android 应用程序 但我陷入了困境 我已经制作了一个可扩展列表 其中它的子项是复选框 此活动从 SQL 数据库获取信息 唯一的问题是我不知道在按下确认按钮后如何获取选中了哪些复选框 我的意思是 我想要的只是获取每个选中
  • 将 CoreBluetooth 与 iBeacons 结合使用

    我一直在对 iOS 设备上的 iBeacons 和 CoreBluetooth 进行大量研究 你的帖子和研究都很棒 我已经学到了很多 不幸的是 我陷入了死胡同 因为这与我真正想做的事情有关 我正在读这篇文章 http developer r
  • 如何使用EntityFramework调用存储过程?

    我已经从 MySQL 数据库生成了 EF4 模型 并且包含了 StoredProcedures 和表 我知道如何针对 EF 进行常规插入 更新 获取 删除操作 但我找不到我的存储过程 这就是我所希望的 using Entities cont
  • 填写有序日期列表中缺少的年份

    我从网络上收集了一些时间序列数据 我得到的时间戳如下所示 24 Jun 21 Mar 20 Jan 10 Dec 20 Jun 20 Jan 10 Dec 有趣的是 数据中缺少年份 但是所有记录都是有序的 您可以从记录推断年份并填写缺少的数
  • 如何使用等效的 SELECT DISTINCT 语句查询 Azure DocumentDB

    DocumentDb 不支持DISTINCT陈述 我在 DocumentDB 中有具有以下结构的文档 数千个文档 type type1 data type type2 data type type2 data type type2 data
  • Jayway JsonPath读取长Java

    在 JSON 中 我收到一个 unix 时间戳 order date 1531380888 我想把这个值读入long所以我可以用它创建一个 Date 对象 Configuration conf Configuration builder m
  • 将 NA 值的框添加到连续图的 ggplot 图例中

    我有一张带有图例渐变的地图 我想为 NA 值添加一个框 我的问题非常类似于this one https stackoverflow com questions 29151167 add na value to ggplot legend f
  • Github SSH 部署密钥的权限被拒绝

    我创建了一个新的存储库 能够使用 SSH 进行克隆并提交等等 但是当我尝试推送时出现以下错误 ERROR Permission to Ronin11 MealPlanr git denied to deploy key fatal Coul
  • 间歇性 SQL 异常 - 网络相关或特定于实例的错误

    我们有一个非常奇怪的间歇性问题 该问题在上个月左右开始出现 其中一些与 mssql 服务器的连接失败并出现错误 System Data SqlClient SqlException A network related or instance
  • 有什么方法可以检查变量是否是真正的 jqXHR?

    正如标题已经提到的 有没有办法检查变量是否是真正的jqXHR 我的意思是 想象的 var resource get resource if resource instanceof jqXHR do something 我试图解决的实际问题是
  • SQLAlchemy 基本问题

    我相信对于任何有 SQLAlchemy 经验的人来说 这都是基础知识 但我觉得这些文档没有什么帮助 而且我厌倦了挠头 给定两个类 class User Base tablename users id Column Integer prima
  • 包装 slf4j API

    我想将 slf4j 与 Logback 改造为遗留应用程序 好处是 遗留应用程序有自己的日志框架 所以我所要做的就是更改日志框架以记录到 slf4j 而不是 log4j 这就像做梦一样 我很高兴 直到我注意到 Logback 为每个日志事件
  • 如何让 IntelliSense 自动完成 XAML 中自定义/用户控件的枚举? [复制]

    这个问题在这里已经有答案了 可能的重复 WPF 如何在 vs2008 xaml 编辑器智能感知中显示枚举属性值 https stackoverflow com questions 419802 wpf how to display enum
  • 当我传递特定参数时,使用 ElementTree 的 iter() 解析 XML 找不到我的标签

    尝试从标签返回属性和值 逐字逐句地遵循 ElementTree 文档不会产生任何结果 没有错误 它只是运行并且不打印任何内容 如果我在没有参数的情况下运行 iter 它会打印每个标签 但如果有参数 它什么也不做 不知道发生了什么事 find
  • 使用 dockerfile 安装 Composer

    我对 docker 还很陌生 我尝试在 Dockerfile 中自动执行 Composer install 但在安装时似乎无法 cd 进入我的应用程序 出了什么问题 或者也许还有另一种更好的方法来做到这一点 我的 docker compos