无法访问 jarfile - Elastic Beanstalk 上的 Docker

Posted

技术标签:

【中文标题】无法访问 jarfile - Elastic Beanstalk 上的 Docker【英文标题】:Unable to access jarfile - Docker on Elastic Beanstalk 【发布时间】:2016-10-24 08:59:56 【问题描述】:

我正在尝试将 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://***.com/a/28854410/336752
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","packed-it.jar"]

我已使用 ECS 成功将 Docker 映像部署到 EC2 实例,但使用 Elastic Beanstalk 没有成功。我的猜测是我在卷上做错了,但我很难理解documentation。我最初从多容器配置开始,但已简化以尝试隔离我的问题。

感谢您的建议。

【问题讨论】:

【参考方案1】:

你需要删除该行

"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

【讨论】:

太棒了!非常感谢,这确实是罪魁祸首。事实上,我删除了整个 volumes 属性。现在我可以配置多容器了...

以上是关于无法访问 jarfile - Elastic Beanstalk 上的 Docker的主要内容,如果未能解决你的问题,请参考以下文章

运行 Docker 映像时无法访问 jarfile

Android ProGuard 无法在 IntelliJ 11.1 中访问 jarfile ..\lib\proguard.jar

docker-compose java 无法访问 jarfile

无法访问 jarfile (Xamarin Visual Studio 15.3.3)

由于出现此错误,无法运行 docker 容器:无法访问 jarfile app.jar

我无法在 Ubuntu 中运行 vue cli - 错误:无法访问 jarfile /snap/vue/1/jar/vue-1.0-SNAPSHOT.jar