【问题标题】:elastic bean stalk failed to deploy with docker-compose, failed with error:open /var/pids/eb-docker-compose-log.pid: no such file or directoryelastic beanstalk 无法使用 docker-compose 部署,失败并出现错误:open /var/pids/eb-docker-compose-log.pid:没有这样的文件或目录
【发布时间】:2022-03-10 08:08:17
【问题描述】:

我已经 dockerised 一个 .net 应用程序。 Dockerfile 位于 app 文件夹中,而不是存储库的根目录中

docker 文件粘贴在下面

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["app/app.csproj", "app/"]
RUN dotnet restore "app/app.csproj"
COPY . .
WORKDIR "/src/app"
RUN dotnet build "app.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "app.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "app.dll"]

为了让 Elastic Beanstalk 读取 dockerfile,我将以下 docker-compose.yml 放在存储库的根目录中


version: '3.4'

services:
  app:
    image: app
    build:
      context: .
      dockerfile: app/Dockerfile

Beanstalk 正在成功构建 dockerimage,但之后它被删除。 eb-engine.log 显示错误

[ERROR] update processes [cfn-hup eb-docker-compose-events docker eb-docker-events healthd eb-docker-compose-log] 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

【问题讨论】:

  • 您是否找到任何解决方法/修复方法?我现在遇到了这个错误。
  • 我猜我使用 Dockerrun.aws.json 而不是 docker 文件并在那里指定了图像名称。
  • 这是有道理的,但对我不起作用。我需要将我的 Dockerrun.aws.json 内容迁移到 docker-compose.yml 文件,以便脱离已弃用的 Elastic Beanstalk 多容器 Docker 平台并迁移到更新的 Docker Linux 2 平台。

标签: docker-compose amazon-elastic-beanstalk


【解决方案1】:

我也一样

[ERROR] update processes [cfn-hup eb-docker-compose-events docker eb-docker-events healthd eb-docker-compose-log] 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

尝试将我的 Docker Compose 应用程序(未使用 .net)部署到我的 Elastic Beanstalk 环境时发生错误。

我找到了解决此问题的方法,这可能是我特有的,但我希望它可以帮助您解决问题(因为我确信您的解决方案可能相似,或者可能完全不同)。我已经回答了这个问题(稍作调整)on this similar SO question,但在这里发布它希望它可以帮助您和未来的开发人员面临类似的问题。


是什么导致了我的错误:

...eb-docker-compose-log.pid: no such file... 错误是由我的应用程序代码在我的 Elastic Beanstalk 环境中找不到环境变量设置的单独问题触发的错误错误。请参阅下文,了解我是如何发现问题的,以及我采取了哪些措施来解决它。


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

我下载了完整日志并偶然发现了一个不同的错误(在 Last 100 lines 的日志中没有显示)

  1. 转到您的 EB 环境
  2. 点击左侧导航栏中的Logs
  3. 点击Request Logs下拉按钮(在右上角)
  4. 点击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... 问题)


我是如何解决这个错误的:

事实证明,如果您使用 docker-compose.yml,在 Elastic Beanstalk 软件配置中设置环境变量时,您必须确保使用 Elastic Beanstalk 为您创建的 .env 文件;否则(来自我自己的测试),EB 只能看到/使用您在自己的.env 文件或您可以在docker-compose.yml 中指定的environment: 列表中指定的环境变量键/值。 p>

注意:请参阅the docs here 中的 Elastic Beanstalk “环境属性和环境变量”“在容器中引用环境变量” 部分,尤其是这一点:

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

注意 如果您在应用程序包中包含 .env 文件,Elastic Beanstalk 将不会生成 .env 文件。”

我通过更新我的 docker-compose.yml 文件以指向 EB 将为我创建的假定 .env 文件解决了我的问题(通过将 env_file: .env 添加到我需要它的服务中),即:

version: "3"
services:
  my_service1:
    # ...
    env_file: .env
  my_service2:
    # ...
    env_file: .env

【讨论】:

    猜你喜欢
    • 2020-04-18
    • 2018-02-10
    • 1970-01-01
    • 2021-09-28
    • 2019-04-01
    • 2018-08-07
    • 2021-08-30
    • 2018-03-25
    • 1970-01-01
    相关资源
    最近更新 更多