Amazon Elastic Beanstalk中的Docker部署错误 – Docker容器意外退出

我想通过Elastic Beanstalk部署一个简单的docker容器,但我得到Docker容器意外退出错误。 不知道这里有什么问题。 先谢谢您的帮助。

Dockerrun.aws.json:

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "janedoe/image", "Update": "true" }, "Ports": [{ "ContainerPort": "10010" }], "Volumes": [{ "HostDirectory": "/home/ec2-user/testdocker", "ContainerDirectory": "/home/ec2-user/testdocker" }], "Logging": "/home/ec2-user/testlogs" } 

Dockerfile:

 FROM centos:centos6 MAINTAINER janedoe 

运行回声“testing”EXPOSE 10010

日志:

 [2016-03-22T22:56:35.034Z] INFO [15895] - [Application update/AppDeployStage0/AppDeployPreHook/03build.sh] : Completed activity. Result: centos6: Pulling from library/centos Digest: sha256:ec1bf627545d77d05270b3bbd32a9acca713189c58bc118f21abd17ff2629e3f Status: Image is up to date for centos:centos6 Successfully pulled centos:centos6 Sending build context to Docker daemon 4.608 kB Sending build context to Docker daemon 4.608 kB Step 1 : FROM centos:centos6 ---> ed452988fb6e Step 2 : MAINTAINER janedoe ---> Running in 8bce7dfb7e59 ---> 04de6fffed04 Removing intermediate container 8bce7dfb7e59 Step 3 : RUN echo "test" ---> Running in 36cef1d7c0e5 test ---> c5b3d119184c Removing intermediate container 36cef1d7c0e5 Step 4 : EXPOSE 10010 ---> Running in ea07cbcc1136 ---> 45f9b3fe6503 Removing intermediate container ea07cbcc1136 Successfully built 45f9b3fe6503 Successfully built aws_beanstalk/staging-app [2016-03-22T22:56:35.034Z] INFO [15895] - [Application update/AppDeployStage0/AppDeployPreHook] : Completed activity. Result: Successfully execute hooks in directory /opt/elasticbeanstalk/hooks/appdeploy/pre. [2016-03-22T22:56:35.035Z] INFO [15895] - [Application update/AppDeployStage0/EbExtensionPostBuild] : Starting activity... [2016-03-22T22:56:35.550Z] INFO [15895] - [Application update/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild] : Starting activity... [2016-03-22T22:56:35.550Z] INFO [15895] - [Application update/AppDeployStage0/EbExtensionPostBuild/Infra-EmbeddedPostBuild] : Completed activity. [2016-03-22T22:56:35.587Z] INFO [15895] - [Application update/AppDeployStage0/EbExtensionPostBuild] : Completed activity. [2016-03-22T22:56:35.588Z] INFO [15895] - [Application update/AppDeployStage0/InfraCleanEbextension] : Starting activity... [2016-03-22T22:56:36.107Z] INFO [15895] - [Application update/AppDeployStage0/InfraCleanEbextension] : Completed activity. Result: Cleaned ebextensions subdirectories from . [2016-03-22T22:56:36.107Z] INFO [15895] - [Application update/AppDeployStage0] : Completed activity. Result: Application update - Command CMD-AppDeploy stage 0 completed [2016-03-22T22:56:36.107Z] INFO [15895] - [Application update/AppDeployStage1] : Starting activity... [2016-03-22T22:56:36.108Z] INFO [15895] - [Application update/AppDeployStage1/AppDeployEnactHook] : Starting activity... [2016-03-22T22:56:36.108Z] INFO [15895] - [Application update/AppDeployStage1/AppDeployEnactHook/00run.sh] : Starting activity... [2016-03-22T22:56:44.157Z] INFO [15895] - [Application update/AppDeployStage1/AppDeployEnactHook/00run.sh] : Activity execution failed, because: 268f1a5e43874771bc6039977e9eb048e704c0b94a5e100a2a9ffbf2d9d7f271 Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Tue Mar 22 22:56:44 UTC 2016:. Check snapshot logs for details. (ElasticBeanstalk::ExternalInvocationError) caused by: 268f1a5e43874771bc6039977e9eb048e704c0b94a5e100a2a9ffbf2d9d7f271 Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Tue Mar 22 22:56:44 UTC 2016:. Check snapshot logs for details. (Executor::NonZeroExitStatus) 

您应该在Dockerfile上使用CMD而不是RUN。

在Dockerfile中执行命令时,必须仔细selectRUN,CMD和ENTRYPOINT(从Docker引用中提取):

  • 跑:

RUN指令将执行当前图像顶部新层的任何命令并提交结果。 生成的提交图像将用于Dockerfile中的下一步。

  • CMD:

CMD的主要目的是为正在执行的容器提供默认值 。 这些默认值可以包含可执行文件,也可以省略可执行文件,在这种情况下,您还必须指定一个ENTRYPOINT指令。

  • 入口点:

入口点允许你configuration一个将作为可执行文件运行的容器。

您应该深入阅读Docker参考和Docker最佳实践

除此之外,如果您打算使用您在Dockerrun.aws.json中定义的卷,请记住AWS文档中陈述的内容 :

使用Dockerfile时,请勿在Dockerrun.aws.json文件中指定Image键。 .Elastic Beanstalk将始终构build并使用Dockerfile中描述的映像。

这意味着你的Dockerrun.aws.json将被忽略,所以要小心。