AWS ElasticBeanstalk找不到Dockerfile

时间:2015-10-29 14:18:14

标签: amazon-web-services docker

我有以下目录布局

./www/index.php
Dockerfile
apache-config.conf

然后我压缩文件并将其上传到Elastic Beanstalk,但是我收到以下错误消息:

[Instance: i-572d1ae8] Command failed on instance. Return code: 1 Output: Dockerfile and Dockerrun.aws.json are both missing, abort deployment. Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/03build.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.

日志文件包含以下消息:

AppDeployPreHook/01unzip.sh] : Completed activity. Result:
  Archive:  /opt/elasticbeanstalk/deploy/appsource/source_bundle
     creating: /var/app/current/DI_Test/
    inflating: /var/app/current/DI_Test/.DS_Store  
     creating: /var/app/current/__MACOSX/
     creating: /var/app/current/__MACOSX/DI_Test/
    inflating: /var/app/current/__MACOSX/DI_Test/._.DS_Store  
    inflating: /var/app/current/DI_Test/apache-config.conf  
    inflating: /var/app/current/DI_Test/Dockerfile  
    inflating: /var/app/current/__MACOSX/DI_Test/._Dockerfile  
     creating: /var/app/current/DI_Test/www/
    inflating: /var/app/current/DI_Test/www/.DS_Store  
     creating: /var/app/current/__MACOSX/DI_Test/www/
    inflating: /var/app/current/__MACOSX/DI_Test/www/._.DS_Store  
    inflating: /var/app/current/DI_Test/www/index.php  
[2015-10-29T14:01:33.279Z] INFO  [2865]  - [Application deployment/StartupStage0/AppDeployPreHook/03build.sh] : Starting activity...
[2015-10-29T14:01:33.579Z] INFO  [2865]  - [Application deployment/StartupStage0/AppDeployPreHook/03build.sh] : Activity execution failed, because: Dockerfile and Dockerrun.aws.json are both missing, abort deployment (ElasticBeanstalk::ExternalInvocationError)
caused by: Dockerfile and Dockerrun.aws.json are both missing, abort deployment (Executor::NonZeroExitStatus)

为什么我的dockerfile没有在这里读取?我可以构建图像并在没有Elastic Beanstalk的情况下运行它。

10 个答案:

答案 0 :(得分:2)

我也遇到过这个问题。似乎还需要Dockerrun.aws.json文件。我相信这是因为其他文件包含在应用程序中。如果您只有Dockerfile而没有其他内容,则不需要。

以下是文档:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html

答案 1 :(得分:1)

您不需要在zip文件中包含父目录。假设你要压缩./www/index.php,Dockerfile和apache-config.conf,

zip dist.zip Dockerfile ./www/index.php apache-config.conf

上传dist.zip。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.deployment.source.html

答案 2 :(得分:1)

压缩项目文件夹中的内容(进入项目文件夹并压缩所有内容),而不是压缩项目文件夹。

答案 3 :(得分:1)

超级新手错误,但是当我遇到这个问题时是因为我的Dockerfile实际上是Dockerfile.txt。删除.txt扩展名并创建一个普通文件后,它工作正常。

答案 4 :(得分:0)

我有一个不同的问题。直接使用json,Dockerrun文件可以采用Dockerrun_${DOCKER_TAG}.aws.json

的形式

解决方案:在拉链中,只允许Dockerrun.aws.json

答案 5 :(得分:0)

两个可能的问题:

1)压缩文件夹时,输入文件夹并从命令行压缩,或者在finder中单独选择每个文件,然后一起压缩。 示例:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/applications-sourcebundle.html

2)Elastic Beanstalk区分大小写,因此请确保您的文件被标记为“ Dockerfile”而不是“ dockerfile”

答案 6 :(得分:0)

分享另一种可能性:

您正在测试eb,并且刚刚添加了Dockerfile。

根据doc

  

如果已安装git,则EB CLI使用git archive命令创建一个   最新的git commit命令内容中的.zip文件。

这就是说,如果您的Dockerfile未提交,则不会被压缩,因此您的实例找不到它。

答案 7 :(得分:0)

在我的情况下,Dockerfile名称(即DockerFile)中存在拼写错误。 Elastic Beanstalk区分大小写。

答案 8 :(得分:0)

我正在尝试上传一个包含单个文件Dockerrun.aws.json的zip。但是docs声明:

  

如果仅使用Dockerfile或仅Dockerrun.aws.json文件部署应用程序,则无需创建.zip文件

因此您可以简单地上传一个或另一个而无需压缩。

答案 9 :(得分:0)

记录文档的另一种方法-错误地将Dockerfile添加到.ebignore文件中。我正在测试非docker和docker部署并在同一目录下工作。显然,常规部署不需要Dockerfile,但是在进行Docker部署时,不应将Dockerfile添加到.ebignore。