无法访问jarfile – Elastic Beanstalk上的Docker

我正在尝试将Spring Boot应用程序的Docker镜像部署到AWS Elastic Beanstalk,并在/var/log/eb-activity.log中遇到此错误:

Docker容器在启动后意外退出:Docker容器意外退出Wed Jun 22 11:56:25 UTC 2016:

错误:无法访问jarfile /home/packedit/app/packed-it.jar。 检查快照日志的详细信息。 (执行人:: NonZeroExitStatus)

这是使用以下Dockerrun.aws.json的Elastic Beanstalk上的单个容器:

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "packedit/packedit-api", "Update": "true" }, "Ports": [ { "ContainerPort": "8080" } ], "Volumes": [ { "HostDirectory": "/var/app/packedit", "ContainerDirectory": "/home/packedit/app" } ], "Logging": "/home/packedit/app/logs" } 

这是Dockerfile:

 FROM java:8 MAINTAINER my@email.com VOLUME /tmp EXPOSE 8080 ENV USER_NAME packedit ENV APP_HOME /home/$USER_NAME/app ENV APP_FILENAME packed-it.jar RUN useradd -ms /bin/bash $USER_NAME RUN mkdir -p $APP_HOME/data ADD $APP_FILENAME $APP_HOME/$APP_FILENAME RUN chown -R $USER_NAME $APP_HOME/ USER $USER_NAME WORKDIR $APP_HOME RUN bash -c 'touch $APP_FILENAME' # Can't use $APP_FILENAME here because ENTRYPOINT does not do ENV replacement # See: http://stackoverflow.com/a/28854410/336752 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","packed-it.jar"] 

我已经成功地使用ECS将Docker映像部署到EC2实例,但是我还没有成功使用Elastic Beanstalk。 我的猜测是,我正在做错了卷,但我正在努力理解文档 。 我最初是从一个多容器configuration开始的,但是已经简化了尝试并隔离我的问题。

感谢您的任何build议。

您需要删除该行

“ContainerDirectory”:“/ home / packedit / app”

从你的Dockerrun.aws.json。

Docker卷的工作方式似乎很混乱。 卷在运行时分配,并在同一台机器上连续运行。

这是发生了什么事。 docker镜像是在/ home / packedit / app中使用jar创build的,但是由于您已经在同一位置定义了一个卷,因此在该位置运行并挂载一个空卷时会创build一个空卷。 因此,图像的相同目录被忽略。

以下是您可以如何在本地重现问题:

 docker build . docker run -v /home/packedit/app IMAGEID_FROM_OUTPUT_OF_PREVIOUS_COMMAND