amazon-web-services - 无法访问jarfile-Elastic Beanstalk上的Docker

标签 amazon-web-services docker spring-boot amazon-elastic-beanstalk

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

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)



这是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。我最初是从多容器配置开始的,但是经过简化后可以尝试隔离问题。

感谢您的任何建议。

最佳答案

您需要删除该行

"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

关于amazon-web-services - 无法访问jarfile-Elastic Beanstalk上的Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37967684/

相关文章:

java - Intellij 没有选择 mapstruct 生成的类

javascript - AWS javascript SDK SES SendMail 非法地址

amazon-web-services - 如何将来自 AWS WAF 的特定 IP 地址列入白名单

io - 在生产环境中,在 LXC 或 Docker 中运行 Cassandra 是个好主意吗?

java - 如何更改生成 JWT token 的端点地址

Spring-boot 配置 client-auth=需要辅助 SSL 监听器

node.js - aws + serverless + webpack => 在产品中找不到模块 xxx

python - 在生产环境中执行频繁的cron工作的有效方法

docker - Linux Mint中的Docker错误

azure - 在azure容器注册表中找不到推送的镜像