【问题标题】:sbt failed download in running play docker containersbt 在运行播放 docker 容器时下载失败
【发布时间】:2017-01-30 20:32:55
【问题描述】:

我已经成功地为play-java 构建了我的 docker 镜像。但是在尝试使用docker run -p 0.0.0.0:9000:9000 egima/play activator run sbt 为它生成一个容器时,sbt 无法下载一个特定的依赖项。日志如下所示:

==== Maven2 Local: tried
  file:/root/.m2/repository/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0.jar
==== Apache Repository: tried  https://repository.apache.org/content/repositories/releases/org/sonatype/sisu/sisu-guice/3.1.0/sisu-guice-3.1.0.jar[0m
    ::::::::::::::::::::::::::::::::::::::::::::::
    ::              FAILED DOWNLOADS            ::
    :: ^ see resolution messages for details  ^ ::
    ::::::::::::::::::::::::::::::::::::::::::::::
    :: org.sonatype.sisu#sisu-guice;3.1.0!sisu-guice.jar
    ::::::::::::::::::::::::::::::::::::::::::::::

注意tried 存储库。我已关注 all the different variants 在我的机器上包含 local maven 存储库,我从日志中确认 sbt 根据我在本地 maven 存储库中指定的内容进行检查,但没有运气。

我在build.sbt/project/plugins.sbt 中的解析器:

resolvers ++=Seq(
    Resolver.sonatypeRepo("public"),
    Resolver.mavenLocal,
    "Apache Repository" at "https://repository.apache.org/content/repositories/releases/"
    )

我还检查了我的本地 maven 存储库,以确保存在缺少的依赖项。缺少什么?

【问题讨论】:

  • /root/.m2?为什么要使用 root 帐户?
  • @VonC,该路径由sbt 自动从Resolver.mavenLocal 转换。我还尝试了链接问题中对其他人有用的路径,但仍然没有运气。
  • 当然:它解析为 $HOME/.m2。那个文件夹是空的吗?它不应该包含一些元素吗?您是否有应该共享的本地 .m2 文件夹 (-v)?
  • 在 Windows 中,我有 C:\Users\me\.m2\repository,不确定 /root/.m2 sbt 是否表示 C:\Users\me\.m2。但是我给出的主机路径非常有效,并且存储了我所有的 Maven 工件。
  • 尝试,在您的 dockerfile 中添加一个RUN ln -s /C/Users/me/.m2 /root/.m2:重建映像并重新启动容器。

标签: windows maven docker playframework sbt


【解决方案1】:

VonC 建议在 cmets 部分在Dockerfile 中添加以下步骤:

RUN ln -s /C/Users/me/.m2 /root/.m2

我相信这个命令应该在我的主机上的$MAVEN_HOME 和解析为/root/.m2 的解析路径Resolver.mavenLocal 之间建立一个软链接。

这应该是解决方案。但是,在尝试之后,我意识到共享路径/c/Users/me(大写C不可见,不知道为什么)在VM内部可见,但在容器内部不可见。因此,在Dockerfile 中包含该行会给我:

ln:cannot access /c/Users/me/.m2: No such file or directory

此外,即使执行 RUN ls /root 也会给我一个类似的错误,这意味着此时目标路径也不存在。

我自己的推论是,解决方案在于通过任何可用的方法将主机路径安装到目标路径上,我认为这是本论坛上一个很好讨论的话题。对于我在docker run 期间使用-v 标志执行装载的特殊情况解决了这个问题。

这是我使用的确切命令:

docker run -v /c/Users/me/.m2:/root/.m2 -p 0.0.0.0:9000:9000 egima/play activator run

我已经写了关于他的a complete blog post,供那些需要更多信息的人使用。

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 1970-01-01
    • 2021-12-03
    • 2021-10-15
    • 2016-04-27
    • 2018-04-29
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    相关资源
    最近更新 更多