使用 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 的相关文章

  • java.lang.IllegalStateException:找不到有效的 Docker 环境。请查看日志并检查 M1 MAC 上的配置

    我正在尝试在本地运行集成测试 我正在尝试拉取 mongo 3 6 0 映像 但出现以下错误 同样的事情也适用于非 m1 mac 错误 org testcontainers dockerclient DockerClientProviderS
  • 连接数据库错误类型:2002:权限被拒绝

    我正在尝试使用以下脚本连接数据库 cxn test php
  • 使用 str_replace 使其仅作用于第一个匹配项?

    我想要一个版本str replace 仅替换第一次出现的 search in the subject 有没有一个简单的解决方案 或者我需要一个 hacky 解决方案 虽然没有它的版本 但解决方案一点也不黑 pos strpos haysta
  • 仅当用户打印时如何重定向到另一个页面

    我一直在尝试找到一种在用户实际打印时重定向到另一个页面的方法 也就是说 只有当他们从打印时打开的选项卡中单击该打印按钮时 我才想重定向 我不想要这种方法 function myFunction window print window loc
  • 从 PHP 使用 linux 'dialog' 命令

    我正在尝试编写一个帮助程序脚本 用于在服务器上执行各种管理任务 这些任务只能从命令行完成 并尝试使用 dialog 命令来显示消息框 输入 密码提示等 但是 需要这项任务要求我用 PHP 处理数据 我在让对话框命令以这种方式工作时遇到问题
  • 在路线中使用中间件的车队购物车,但我在项目中找不到任何 $routemiddleware...甚至在 kernel.php 中也找不到...我在哪里可以找到它?

    在路线中使用中间件的车队购物车 但我在项目中找不到任何 routemiddleware 甚至在 kernel php 中也找不到 我在哪里可以找到它 Laravel 版本 5 7 护照版本 7 5 CMS 舰队购物车 内核 php name
  • nginx + php-fpm = 找不到文件

    当我尝试访问时info php我得到一个File not found error 我尝试了一些教程但无济于事 配置 默认 server listen 80 listen 80 default ipv6only on server name
  • 使用 Stripe 创建订阅后如何获取费用 ID?

    我在用Stripe作为支付网关 现在有一个大问题困扰着我 我使用下面的代码来创建订阅
  • php 区分中文和英文字符

    如何区分中文和英文字符for loops 这是代码
  • 为简单应用程序生成 PHAR

    我正在尝试使用 Symfony2 控制台库构建 CLI 工具 我已经有了一些基本的工作 现在我想将其打包为一个 Phar 我读过一些示例 但我看到的示例非常简单 3 个文件 没有命名空间等 In my src 目录我有以下内容 Above
  • PHP通知和警告的区别

    当编写代码错误时 可能会出现警告和通知 我知道错误背后的想法 我想警告是为了通知您可能导致错误的事情 但通知不是完全相同吗 我认为通知并不是某件事做得正确的消息 这让我有点困惑 任何人都可以区分这两者之间的区别以及应该如何处理这些消息 通知
  • 我可以使用 vim “star” 搜索来搜索 PHP 类成员和方法吗?

    vim 星号 星号搜索 help star 是一个很棒的功能 它可以让您找到光标所在单词的下一个出现位置 不幸的是 它将美元前缀视为字符串的一部分 因此如果我在类名中的 SearchTerm 上方按 它会在注释中找到 SearchTerm
  • 返回导航缓存 - IE

    当我在 IE 11 上运行 Web 应用程序时 收到如下警告消息 DOM7011 此页面上的代码禁用了后退和前进缓存 为了 更多信息 请参阅 http go microsoft com fwlink LinkID 291337 http g
  • PHP 多个 Curl 请求

    我目前经常使用 PHP 的 Curl 每次获取100页左右的结果需要花费很多时间 对于每个请求 我都使用这样的代码 ch curl init get source curl close ch 我有什么选择可以加快速度 我应该如何使用mult
  • 在 Angular 6 中添加 Xsrf-Token 时出现问题

    通过 API 提交的表单中的数据已成功发布 但是将 X CSRF TOKEN 添加到标头并设置后withCredentials true结果数据未发布到名为的脚本insert php Error 加载失败http localhost sim
  • Docker Build 找不到 pip

    尝试关注一些 1 https aws amazon com blogs aws run docker apps locally using the elastic beanstalk eb cli 2 http docs aws amazo
  • 谷歌图片搜索API

    我有一个网站 用户可以在其中提交图片 我想用这些图片自动在 Google 上进行搜索 以尽量减少图片被从其他网站盗用的可能性 我知道 Firefox 扩展 但这需要我右键单击每张图片并等待结果出现 我想自动化这个 我一直在寻找 API 但
  • Laravel 中间件将变量返回给控制器

    我正在对用户进行权限检查 以确定他们是否可以查看页面 这涉及首先通过一些中间件传递请求 我遇到的问题是 在将数据返回到视图本身之前 我在中间件和控制器中复制相同的数据库查询 这是设置的示例 路线 php Route get pages id
  • PHP Session Id 在页面之间发生变化

    我有一个问题 我在 2 个页面之间丢失了 PHP 会话 session start 包含在一个名为 session inc php 的文件中 该文件包含在每个需要设置会话的页面中 这适用于网站上除一个特定页面 member profile
  • cUrl 在本地主机上工作正常,但在服务器上不起作用,仅显示空白页面

    当我在服务器上运行以下代码时 它只显示空白页面并突然停止进一步执行 我还检查了已安装的服务器上的 cUrl 这是我的代码 ftp server ftps server Voorraadtonen link csv ch curl init

随机推荐

  • 对 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