定义用于 AWS Elastic Beanstalk 部署的特定 docker-compose 文件

Jar*_*rad 11 amazon-web-services amazon-elastic-beanstalk docker-compose

在运行eb createcommand之前,如何告诉 Elastic Beanstalk 使用不同的docker-compose文件?

\n

比如我的项目目录:

\n
HelloWorldDocker\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80.elasticbeanstalk\n\xe2\x94\x82  \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80config.yml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80app/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80proxy/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80docker-compose.prod.yml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80docker-compose.yml\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. Mydocker-compose.yml是我用于本地开发的
  2. \n
  3. Mydocker-compose.prod.yml是我想用于生产的
  4. \n
\n

eb create有没有办法在从 EB CLI运行命令之前定义此配置?

\n

说明显而易见的是:我意识到我可以用于docker-compose.yml我的生产文件和docker-compose.dev.yml我的本地开发,但随后在docker-compose up本地运行命令变得更加乏味(即docker-compose -f docker-compose.dev.yml up --build...:)。此外,我主要感兴趣的是这是否可能,因为我正在学习 Elastic Beanstalk,以及如果我愿意的话我可以如何做到。

\n
\n

编辑/更新:2021 年 6 月 11 日

\n

我试图用docker-compose.prod.yml这个重命名docker-compose.yml.ebextensions/docker-settings.config

\n
container_commands:\n  rename_docker_compose:\n    command: mv docker-compose.prod.yml docker-compose.yml\n
Run Code Online (Sandbox Code Playgroud)\n
\n

>eb 部署

\n
\n
2021-06-11 16:44:45    ERROR   Instance deployment failed.\n  For details, see \'eb-engine.log\'.\n2021-06-11 16:44:45    ERROR   Instance deployment: Both \n  \'Dockerfile\' and \'Dockerrun.aws.json\' are missing in your\n  source bundle. Include at least one of them. The deployment\n  failed.\n
Run Code Online (Sandbox Code Playgroud)\n

eb-engine.log中,我看到:

\n
2021/06/11 16:44:45.818876 [ERROR] An error occurred during \n  execution of command [app-deploy] - [Docker Specific Build\n  Application]. Stop running the command. Error: Dockerfile and\n  Dockerrun.aws.json are both missing, abort deployment\n
Run Code Online (Sandbox Code Playgroud)\n

根据我的测试,这是由于 AWS 需要/bin/sh -c docker-compose config在执行container_commands.

\n
\n

编辑/更新#2

\n

如果我使用commands而不是container_commands

\n
commands:\n  rename_docker_compose:\n    command: mv docker-compose.prod.yml docker-compose.yml\n    cwd: /var/app/staging\n
Run Code Online (Sandbox Code Playgroud)\n

似乎确实成功地进行了替换:

\n
2021-06-11 21:40:44,809 P1957 [INFO] Command find_docker_compose_file\n2021-06-11 21:40:45,086 P1957 [INFO] -----------------------Command Output-----------------------\n2021-06-11 21:40:45,086 P1957 [INFO]    ./var/app/staging/docker-compose.prod.yml\n2021-06-11 21:40:45,086 P1957 [INFO] ------------------------------------------------------------\n2021-06-11 21:40:45,086 P1957 [INFO] Completed successfully.\n
Run Code Online (Sandbox Code Playgroud)\n

但我仍然受到以下打击:

\n
2021/06/11 21:40:45.192780 [ERROR] An error occurred during\n  execution of command [app-deploy] - [Docker Specific Build \n  Application]. Stop running the command. Error: Dockerfile and \n  Dockerrun.aws.json are both missing, abort deployment \n
Run Code Online (Sandbox Code Playgroud)\n
\n

编辑/更新:2021 年 6 月 12 日

\n

我使用的是 Windows 10 计算机。在本地运行eb deploy命令之前,我打开了使用 MINGW64 终端的 Git Bash。我cd进入了存在的prebuild目录build.sh。我跑:

\n
chmod +x build.sh\n
Run Code Online (Sandbox Code Playgroud)\n

如果我这样做ls -l,它会返回:

\n
-rwxr-xr-x 1 Jarad 197121 58 Jun 12 12:31 build.sh*\n
Run Code Online (Sandbox Code Playgroud)\n

我认为这意味着该文件是可执行的。

\n

然后我就致力于 git。

\n

我然后就跑了eb deploy

\n

我在 eb-engine.log 中看到build.sh: permission denied错误。以下是相关部分的摘录。

\n
...\n2021/06/12 19:41:38.108528 [INFO] application/zip\n\n2021/06/12 19:41:38.108541 [INFO] app source bundle is zip file ...\n2021/06/12 19:41:38.108547 [INFO] extracting /opt/elasticbeanstalk/deployment/app_source_bundle to /var/app/staging/\n2021/06/12 19:41:38.108556 [INFO] Running command /bin/sh -c /usr/bin/unzip -q -o /opt/elasticbeanstalk/deployment/app_source_bundle -d /var/app/staging/\n2021/06/12 19:41:38.149125 [INFO] finished extracting /opt/elasticbeanstalk/deployment/app_source_bundle to /var/app/staging/ successfully\n2021/06/12 19:41:38.149142 [INFO] Executing instruction: RunAppDeployPreBuildHooks\n2021/06/12 19:41:38.149190 [INFO] Executing platform hooks in .platform/hooks/prebuild/\n2021/06/12 19:41:38.149249 [INFO] Following platform hooks will be executed in order: [build.sh]\n2021/06/12 19:41:38.149255 [INFO] Running platform hook: .platform/hooks/prebuild/build.sh\n2021/06/12 19:41:38.149457 [ERROR] An error occurred during execution of command [app-deploy] - [RunAppDeployPreBuildHooks]. Stop running the command. Error: Command .platform/hooks/prebuild/build.sh failed with error fork/exec .platform/hooks/prebuild/build.sh: permission denied \n\n2021/06/12 19:41:38.149464 [INFO] Executing cleanup logic\n2021/06/12 19:41:38.149572 [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":1623526898,"severity":"ERROR"}]}]}\n\n2021/06/12 19:41:38.149706 [INFO] Platform Engine finished execution on command: app-deploy\n...\n
Run Code Online (Sandbox Code Playgroud)\n

知道为什么我收到权限被拒绝错误吗?

\n
\n

我从这种疯狂中得出的结论

\n

Elastic Beanstalk 的 EB CLIeb deploy命令无法app_source_bundle在 Windows 计算机上正确压缩文件(它创建的文件)。

\n

证明

\n

我能够通过在本地压缩并通过 Elastic Beanstalk 在线界面手动上传来重新创建 Marcin 的示例。当我这样做并检查源包时,它显示确实build.sh 具有可执行权限(-rwxr-xr-x)。

\n
[root@ip-172-31-11-170 deployment]# zipinfo app_source_bundle\nArchive:  app_source_bundle\nZip file size: 993 bytes, number of entries: 5\ndrwxr-xr-x  3.0 unx        0 bx stor 21-Jun-13 03:08 .platform/\ndrwxr-xr-x  3.0 unx        0 bx stor 21-Jun-13 03:08 .platform/hooks/\ndrwxr-xr-x  3.0 unx        0 bx stor 21-Jun-13 03:08 .platform/hooks/prebuild/\n-rwxr-xr-x  3.0 unx       58 tx defN 21-Jun-13 03:09 .platform/hooks/prebuild/build.sh\n-rw-r--r--  3.0 unx       98 tx defN 21-Jun-13 03:08 docker-compose.prod.yml\n
Run Code Online (Sandbox Code Playgroud)\n

当我使用 EB CLI 和完全相同的文件进行初始化和创建时,build.sh 没有可执行权限 (-rw-rw-rw-)。

\n
[ec2-user@ip-172-31-5-39 deployment]$ zipinfo app_source_bundle\nArchive:  app_source_bundle\nZip file size: 1092 bytes, number of entries: 5\ndrwxrwxrwx  2.0 fat        0 b- stor 21-Jun-12 20:32 ./\n-rw-rw-rw-  2.0 fat       98 b- defN 21-Jun-12 20:08 docker-compose.prod.yml\n-rw-rw-rw-  2.0 fat      993 b- defN 21-Jun-12 20:15 myzip.zip\ndrwxrwxrwx  2.0 fat        0 b- stor 21-Jun-12 20:08 .platform/hooks/prebuild/\n-rw-rw-rw-  2.0 fat       58 b- defN 21-Jun-12 20:09 .platform/hooks/prebuild/build.sh\n
Run Code Online (Sandbox Code Playgroud)\n

因此,我认为这是 AWS EB CLI 部署命令在如何为 Windows 用户压缩文件方面的一个错误。

\n

Mar*_*cin 3

您无法从命令级别执行此操作。但我想你可以编写container_commands脚本将你的文件从重命名为:docker-composedocker-compose.dev.ymldocker-compose.yml

\n
\n

您可以使用container_commands 键来执行影响应用程序源代码的命令。容器命令在设置应用程序和 Web 服务器并且提取应用程序版本存档之后、部署应用程序版本之前运行。

\n
\n

2021 年 6 月 12 日更新

\n

我尝试使用 3.4.1 EB 平台的简化设置来复制该docker-compose.prod.yml问题Docker running on 64bit Amazon Linux 2

\n

docker-compose.prod.yml

\n
version: "3"\n\nservices:\n    client:\n        image: nginx\n        ports:\n            - 80:80\n
Run Code Online (Sandbox Code Playgroud)\n

我可以确认并重现该问题container_commands。所以在我的测试中,解决方案是设置预构建部署钩子

\n

所以我的部署 zip 具有以下结构:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docker-compose.prod.yml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .platform\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 hooks\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 prebuild\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 build.sh\n\n
Run Code Online (Sandbox Code Playgroud)\n

在哪里

\n

构建.sh

\n
#!/bin/bash\n\nmv docker-compose.prod.yml docker-compose.yml\n
Run Code Online (Sandbox Code Playgroud)\n

我还在build.sh创建部署 zip 之前制作了可执行文件。

\n

app_source_bundle权限 ( zipinfo -l)

\n
Zip file size: 1008 bytes, number of entries: 5\ndrwxr-xr-x  3.0 unx        0 bx        0 stor 21-Jun-12 07:37 .platform/\ndrwxr-xr-x  3.0 unx        0 bx        0 stor 21-Jun-12 07:37 .platform/hooks/\ndrwxr-xr-x  3.0 unx        0 bx        0 stor 21-Jun-12 07:38 .platform/hooks/prebuild/\n-rwxr-xr-x  3.0 unx       77 tx       64 defN 21-Jun-12 07:24 .platform/hooks/prebuild/build.sh\n-rw-r--r--  3.0 unx       92 tx       68 defN 21-Jun-12 07:01 docker-compose.prod.ym\n
Run Code Online (Sandbox Code Playgroud)\n