Jar*_*rad 11 amazon-web-services amazon-elastic-beanstalk docker-compose
在运行eb create
command之前,如何告诉 Elastic Beanstalk 使用不同的docker-compose
文件?
比如我的项目目录:
\nHelloWorldDocker\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)\ndocker-compose.yml
是我用于本地开发的docker-compose.prod.yml
是我想用于生产的eb create
有没有办法在从 EB CLI运行命令之前定义此配置?
说明显而易见的是:我意识到我可以用于docker-compose.yml
我的生产文件和docker-compose.dev.yml
我的本地开发,但随后在docker-compose up
本地运行命令变得更加乏味(即docker-compose -f docker-compose.dev.yml up --build...
:)。此外,我主要感兴趣的是这是否可能,因为我正在学习 Elastic Beanstalk,以及如果我愿意的话我可以如何做到。
编辑/更新:2021 年 6 月 11 日
\n我试图用docker-compose.prod.yml
这个重命名docker-compose.yml
为.ebextensions/docker-settings.config
:
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\n>eb 部署:
\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中,我看到:
\n2021/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
.
编辑/更新#2
\n如果我使用commands
而不是container_commands
:
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它似乎确实成功地进行了替换:
\n2021-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但我仍然受到以下打击:
\n2021/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编辑/更新:2021 年 6 月 12 日
\n我使用的是 Windows 10 计算机。在本地运行eb deploy
命令之前,我打开了使用 MINGW64 终端的 Git Bash。我cd
进入了存在的prebuild
目录build.sh
。我跑:
chmod +x build.sh\n
Run Code Online (Sandbox Code Playgroud)\n如果我这样做ls -l
,它会返回:
-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
。
我在 eb-engine.log 中看到build.sh: permission denied
错误。以下是相关部分的摘录。
...\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知道为什么我收到权限被拒绝错误吗?
\nElastic Beanstalk 的 EB CLIeb deploy
命令无法app_source_bundle
在 Windows 计算机上正确压缩文件(它创建的文件)。
我能够通过在本地压缩并通过 Elastic Beanstalk 在线界面手动上传来重新创建 Marcin 的示例。当我这样做并检查源包时,它显示确实build.sh
具有可执行权限(-rwxr-xr-x)。
[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-)。
[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您无法从命令级别执行此操作。但我想你可以编写container_commands脚本将你的文件从重命名为:docker-compose
docker-compose.dev.yml
docker-compose.yml
\n\n您可以使用container_commands 键来执行影响应用程序源代码的命令。容器命令在设置应用程序和 Web 服务器并且提取应用程序版本存档之后、部署应用程序版本之前运行。
\n
2021 年 6 月 12 日更新
\n我尝试使用 3.4.1 EB 平台的简化设置来复制该docker-compose.prod.yml
问题Docker running on 64bit Amazon Linux 2
。
docker-compose.prod.yml
\nversion: "3"\n\nservices:\n client:\n image: nginx\n ports:\n - 80:80\n
Run Code Online (Sandbox Code Playgroud)\n我可以确认并重现该问题container_commands
。所以在我的测试中,解决方案是设置预构建部署钩子。
所以我的部署 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 之前制作了可执行文件。
app_source_bundle权限 ( zipinfo -l
)
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
归档时间: |
|
查看次数: |
4971 次 |
最近记录: |