1

我试图将Spring Boot应用程序的Docker映像部署到AWS Elastic Beanstalk,并且在/var/log/eb-activity.log中遇到此错误:无法访问jarfile - Elastic Beanstalk上的Docker

Docker container quit unexpectedly after launch: Docker container quit unexpectedly on Wed Jun 22 11:56:25 UTC 2016:

Error: Unable to access jarfile /home/packedit/app/packed-it.jar. Check snapshot logs for details. (Executor::NonZeroExitStatus)

这是弹性豆茎单个容器具有以下Dockerrun.aws.json:

{ 
    "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 [email protected] 
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"] 

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

感谢您的任何建议。

回答

2

您需要从Dockerrun.aws.json删除行

"ContainerDirectory": "/home/packedit/app"

这似乎与docker volumes如何工作混淆。卷在运行时分配,并在同一台机器上连续运行。

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

这里是你如何可以在本地重现问题:

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

辉煌!非常感谢,这确实是罪魁祸首。事实上,我删除了整个'卷'属性。现在我可以配置多容器了... – Stu