在 Elastic Beanstalk 上使用 docker-compose 部署简单的 docker 应用程序

2024-01-22

我有一个简单的 docker 应用程序,可以通过以下方式在本地运行docker-compose up,当我发送.yml将文件发送给我的朋友,他们也能够在本地计算机上启动并运行它。但是,当我尝试将其部署在 Elastic Beanstalk 上时,我收到错误(具体来说,与error:open /var/pids/eb-docker-compose-log.pid: no such file or directory,正如我将在下面展示的那样)。我尝试多次上传到 Elastic Beanstalk,但出现相同的错误。这是一个自定义应用程序,但它们与我尝试按照以下说明操作时遇到的错误相同https://docker-curriculum.com/#docker-on-aws。这里是docker-compose.yml对于我当前的应用程序:

version: "3"
services:
  server:
    image: mfatigati/shop-server
    container_name: shop-server
    ports:
      - "4000:4000"
  client:
    image: mfatigati/shop-client
    depends_on:
      - server
    ports:
      - "3000:3000"

mfatigati/shop-server and mfatigati/shop-client都是 Node.JS 应用程序,即FROM node:16在他们的Dockerfile.

为了在 AWS 上部署它,我转到 EB 控制台,然后:

  1. 单击“创建应用程序”将我带到创建应用程序屏幕
  2. 选择“Docker”作为平台
  3. 选择“上传本地代码”,上传上述内容.yml file.
  4. 点击“创建应用程序”

根据注释here https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/single-container-docker-configuration.html,我认为这应该是我需要做的全部(也许我错了?),但每次我都会遇到错误eb.engine.log文件。我粘贴了下面似乎相关的部分,因为它是唯一提到错误的部分,并且它还反映了 AWS GUI 控制台中显示的内容。主要问题似乎反映在关于error:open /var/pids/eb-docker-compose-log.pid: no such file or directory:

2022/02/14 14:17:23.619888 [ERROR] update processes [cfn-hup eb-docker-events healthd eb-docker-compose-events eb-docker-compose-log docker] pid symlinks failed with error Read pid source file /var/pids/eb-docker-compose-log.pid failed with error:open /var/pids/eb-docker-compose-log.pid: no such file or directory
2022/02/14 14:17:23.619901 [ERROR] An error occurred during execution of command [app-deploy] - [Track pids in healthd]. Stop running the command. Error: update processes [cfn-hup eb-docker-events healthd eb-docker-compose-events eb-docker-compose-log docker] pid symlinks failed with error Read pid source file /var/pids/eb-docker-compose-log.pid failed with error:open /var/pids/eb-docker-compose-log.pid: no such file or directory 

2022/02/14 14:17:23.619905 [INFO] Executing cleanup logic
2022/02/14 14:17:23.620005 [INFO] CommandService Response: {"status":"FAILURE","api_version":"1.0","results":[{"status":"FAILURE","msg":"Engine execution has encountered an error.","returncode":1,"events":[{"msg":"Instance deployment failed. For details, see 'eb-engine.log'.","timestamp":1644848243,"severity":"ERROR"}]}]}

任何见解将不胜感激!我在下面粘贴了一些屏幕截图,以防有帮助。

对应步骤2的GUI https://i.stack.imgur.com/L4AgD.png; 对应步骤3的GUI https://i.stack.imgur.com/66zca.png; 图形用户界面错误 https://i.stack.imgur.com/LXu6C.png


我也有同样的error:open /var/pids/eb-docker-compose-log.pid: no such file or directory尝试将 Docker Compose 应用程序部署到我的 Elastic Beanstalk 环境时发生错误;我不确定我的解决方案是否与您需要的解决方案相同,但我希望它能为您指明正确的方向(并帮助未来的开发人员面临类似的问题).


是什么导致了我的错误:

This ...eb-docker-compose-log.pid: no such file...错误是由单独问题触发的虚假错误;我的单独错误实际上是我的应用程序代码没有找到在我的 Elastic Beanstalk 环境中设置的环境变量的问题。请参阅下文,了解我如何发现问题以及我如何解决该问题。


我如何发现我真正的问题:

我下载了完整日志:

  1. 转到您的 EB 环境
  2. click Logs在左侧导航栏上
  3. 点击Request Logs下拉按钮(右上角)
  4. click Full Logs
  5. 点击Download完整日志准备好后链接

在日志中,我发现了真正的问题eb-docker/containers/eb-current-app/eb-stdouterr.log文件,问题是我的应用程序代码无法找到在我的 Elastic Beanstalk 软件配置中设置的环境变量。

如果您好奇我的错误所说的内容:

panic: required key ONE_OF_MY_ENV_KEYS missing value

(我在这个日志中还修复了一些其他错误,但是修复上面显示的错误最终解决了...eb-docker-compose-log.pid: no such file... error).


我如何修复这个错误:

我发现如果你使用docker-compose.yml,在 Elastic Beanstalk 软件配置中设置环境变量时,您必须确保使用.envElastic Beanstalk 为您创建的文件;否则(来自我自己的测试),EB仅查看/使用您自己指定的环境变量键/值.env文件或environment:您可以在其中指定的列表docker-compose.yml.

NOTE:看到弹性豆茎“环境属性和环境变量” and “引用容器中的环境变量”中的部分这里的文档 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-software-config.env,特别是这一点:

“Elastic Beanstalk 生成一个名为的 Docker Compose 环境文件.env在您的应用程序项目的根目录中。此文件存储您为 Elastic Beanstalk 配置的环境变量。

Note如果您包括.env如果您的应用程序包中包含文件,Elastic Beanstalk 将不会生成.env file."

我通过更新解决了我的问题docker-compose.yml文件指向假定的.envEB 为我创建的文件(通过增加env_file: .env到我需要的服务), i.e.:

version: "3"
services:
  my_service1:
    # ...
    env_file: .env
  my_service2:
    # ...
    env_file: .env
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Elastic Beanstalk 上使用 docker-compose 部署简单的 docker 应用程序 的相关文章

随机推荐

  • JSON.net 与 XPATH:如何保留 SelectToken 中的节点顺序?

    XPath 2 规定应按照文档中的顺序返回选择的节点顺序 当您在 JSON Net 中 SelectTokens JSONPath 时 情况似乎并非如此 当我处理以下文档时 string json Files dir1 Files file
  • 文件版本信息和程序集信息

    给出 Blah dll 的 AssemblyInfo cs 中的这段代码 assembly AssemblyVersion 3 3 3 3 assembly AssemblyFileVersion 2 2 2 2 然后在一个单独的 exe中
  • 如何将字符串转换为HashMap? [复制]

    这个问题在这里已经有答案了 我有一个 Java 属性文件 并且有一个KEY as ORDER 所以我检索VALUE那个KEY使用getProperty 加载属性文件后的方法如下 String s prop getProperty ORDER
  • Java 8 Javascript 引擎向后兼容性

    我正在我的项目中尝试 Java 8 但遇到了与构建过程相关的错误 我正在使用 ANT 脚本 有时我会使用一些 javascript 嵌入到 ANT 中 来执行一些构建特定的操作 导致错误的脚本部分如下所示 该项目使用 Java 7 或 Ja
  • Cygwin 上的 C 编译器生成什么?

    根据下面的 recognize compilers sh 脚本的输出 Cygwin 上似乎可以使用以下 C 编译器 那些标记为 Cygwin 的要求 cygwin1 dll 文件可用 pc 和 w64 编译器有什么区别 为什么没有 x86
  • C++20 std::ranges:范围适配器跳过每个第 n 个元素

    我正在尝试更熟悉 C 20std ranges我遇到了一个看似简单的问题 如果不滚动我自己的实现 我无法找到标准解决方案 问题很简单 我只想访问和处理使用 C 20 范围适配器的范围中的每个第 N 个元素 例如 我正在寻找一个实用程序 其中
  • 从一个文件访问另一个文件中的类实例?

    我有两个文件 都在同一个项目中 网络抓取框架的一部分 File1 处理 File2 生成的项目 在 File2 中 我有一个函数可以打印出有关进程的一些基本统计信息 已生成的项目数等 我在 File1 中有计数 我想使用 File1 中的统
  • Qt 库中的 GUI 线程检测

    我需要知道我的函数在哪个线程的上下文中运行 是主 GUI 线程还是某个工作线程 我无法使用简单的解决方案将 QThread 指针存储在主函数中并将其与 QThread currentThread 进行比较 因为我正在编写一个库并且无权访问主
  • php通过字符串名称调用类函数

    如何通过名称调用普通 非静态 类函数 下面给出了一个错误 指出 param 1 需要是一个有效的回调 我不希望该函数是静态的 我希望它是一个普通的函数 并且到目前为止我看到的所有示例都将它们设为静态 class Player public
  • Dagger 2 组件中的 getter 方法的用途是什么?

    我正在尝试了解 Dagger 2 中的组件 这是一个示例 Component modules MyModule class public interface MyComponent void inject InjectionSite inj
  • SingleOutputStreamOperator#returns(TypeHint typeHint) 方法的 javadoc

    我正在阅读源代码SingleOutputStreamOperator returns 它的javadoc是 Adds a type information hint about the return type of this operato
  • Objective-C 中#import 和#include 有什么区别?

    Objective C 中 import 和 include 之间有什么区别 有时您应该使用其中之一而不是另一个 是否已弃用 我正在阅读以下教程 http www otierney net objective c html preamble
  • org.jooq.exception.DataAccessException:不支持的 Unicode 转义序列 \u0000

    我正在尝试使用 jOOQ 将序列化的 JSON 插入 Postgres JSONB 列 但它失败了 因为序列化的 JSON 有一个 0在它里面 jOOQ 有没有办法自动为我们逃脱这个问题 这是我得到的异常 org jooq exceptio
  • 使用核心音频实现后处理低通滤波器

    我已经使用基于时间的值实现了一个基本的低通滤波器 这没问题 但是尝试找到正确的时间片是猜测工作 并且会根据不同的输入音频文件给出不同的结果 这是我现在所拥有的 void processDataWithInBuffer const int16
  • 创建阴影 jar 时出错:null:IllegalArgumentException

    我在项目中使用 ASM 6 1 动态生成类文件 但是我在组装胖罐子时遇到了问题 ERROR Failed to execute goal org apache maven plugins maven shade plugin 2 4 3 s
  • Delphi 中如何将接口转换为对象

    在delphi 2009中我引用了IInterface我想将其投射到底层TObject Using TObject IInterface 显然在 Delphi 2009 中不起作用 尽管它应该在 Delphi 2010 中起作用 我的搜索引
  • 函数模板的非依赖默认模板参数是否允许 SFINAE?

    这里的 不依赖 是指 不依赖于该特定函数模板的任何其他模板参数 回答的同时这个问题 https stackoverflow com q 15232758 500104 我以为我找到了答案 但根据 Johannes 在我的答案的评论中 我误解
  • 将内联 svg 保存为图像文件

    我有一个内联 SVG 代码 它会根据用户选择的颜色 CSS 进行更改 我希望能够将 svg 行保存为 onclick 外部文件 svg 或 png 或 jpeg 例子 http jsfiddle net WebbySmart fof8jqx
  • 描述一下您用于 Java Web 应用程序的架构? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 让我们分享一下基于Java的Web应用架构 Web 应用程序有许多不同的架构 可以使用 Java 来实现 这个问题的答案可以作为各种
  • 在 Elastic Beanstalk 上使用 docker-compose 部署简单的 docker 应用程序

    我有一个简单的 docker 应用程序 可以通过以下方式在本地运行docker compose up 当我发送 yml将文件发送给我的朋友 他们也能够在本地计算机上启动并运行它 但是 当我尝试将其部署在 Elastic Beanstalk