首页 文章

无法访问jarfile - Elastic Beanstalk上的Docker

提问于
浏览
1

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

Docker容器在启动后意外退出:Docker容器在2016年6月22日星期三11:56:25 UTC意外退出:错误:无法访问jarfile /home/packedit/app/packed-it.jar . 检查快照日志以获取详细信(执行人:: NonZeroExitStatus)

这是Elastic Beanstalk上的单个容器,带有以下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 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 . 我的猜测是我在卷上做错了,但我很难理解documentation . 我最初是从一个多容器配置开始的,但已经简化以试图找出我的问题 .

谢谢你的建议 .

1 回答

  • 2

    你需要删除该行

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

    来自你的Dockerrun.aws.json .

    似乎混淆是如何docker volumes工作 . 卷在运行时分配,并在同一台机器上连续运行时保持不变 .

    这是正在发生的事情 . docker镜像是使用/ home / packedit / app中的jar构建的,但由于您已在同一位置定义了一个卷,因此在运行并装入该位置时会创建一个空卷 . 因此,忽略图像的相同目录 .

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

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

相关问题