gpt4 book ai didi

docker - 如何在Play的sbt-native-packager 0.8.0-M2中使用Docker

转载 作者:行者123 更新时间:2023-12-02 18:17:20 31 4
gpt4 key购买 nike

我正在尝试在Play 2.2项目上构建Docker镜像。我在Ubuntu Linux上使用Docker版本1.2.0。

我在Build.scala中特定于Docker的设置如下所示:

dockerBaseImage in Docker := "dockerfile/java:7"
maintainer in Docker := "My name"
dockerExposedPorts in Docker := Seq(9000, 9443)
dockerExposedVolumes in Docker := Seq("/opt/docker/logs")

生成的Dockerfile:
FROM dockerfile/java:latest
MAINTAINER
ADD files /
WORKDIR /opt/docker
RUN ["chown", "-R", "daemon", "."]
USER daemon
ENTRYPOINT ["bin/device-guides"]
CMD []

输出看起来像dockerBaseImage被忽略,并且默认
(dockerfile/java:latest) is not handled correctly:
[project] $ docker:publishLocal
[info] Wrote /..../project.pom
[info] Step 0 : FROM dockerfile/java:latest
[info] ---> bf7307ff060a
[info] Step 1 : MAINTAINER
[error] 2014/10/07 11:30:12 Invalid Dockerfile format
[trace] Stack trace suppressed: run last docker:publishLocal for the full output.
[error] (docker:publishLocal) Nonzero exit value: 1
[error] Total time: 2 s, completed Oct 7, 2014 11:30:12 AM
[project] $ run last docker:publishLocal
java.lang.RuntimeException: Invalid port argument: last
at scala.sys.package$.error(package.scala:27)
at play.PlayRun$class.play$PlayRun$$parsePort(PlayRun.scala:52)
at play.PlayRun$$anonfun$play$PlayRun$$filterArgs$2.apply(PlayRun.scala:69)
at play.PlayRun$$anonfun$play$PlayRun$$filterArgs$2.apply(PlayRun.scala:69)
at scala.Option.map(Option.scala:145)
at play.PlayRun$class.play$PlayRun$$filterArgs(PlayRun.scala:69)
at play.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$1.apply(PlayRun.scala:97)
at play.PlayRun$$anonfun$playRunTask$1$$anonfun$apply$1.apply(PlayRun.scala:91)
at scala.Function7$$anonfun$tupled$1.apply(Function7.scala:35)
at scala.Function7$$anonfun$tupled$1.apply(Function7.scala:34)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) Invalid port argument: last
[error] Total time: 0 s, completed Oct 7, 2014 11:30:16 AM

要完成这项工作需要做什么?

我可以从命令行使用Docker构建镜像:
docker build --force-rm -t device-guides:1.0-SNAPSHOT .

最佳答案

打包/发布设置是每个项目的设置,而不是每个内部版本的设置。

您使用的是Build.scala样式的构建,其格式如下:

object ApplicationBuild extends Build {
val main = play.Project(appName, appVersion, libraryDependencies).settings(
...
)
}

设置应应用于此main项目。这意味着您将在项目上调用settings()方法,并传递适当的设置以根据需要设置包装。

在这种情况下:

object ApplicationBuild extends Build {
val main = play.Project(appName, appVersion, libraryDependencies).settings(
dockerBaseImage in Docker := "dockerfile/java:7",
maintainer in Docker := "My name",
dockerExposedPorts in Docker := Seq(9000, 9443),
dockerExposedVolumes in Docker := Seq("/opt/docker/logs")
)
}

要在多个项目中重复使用相似的设置,您可以创建类型为Seq[sbt.Setting]的val,或扩展sbt.Project以提供通用设置。有关如何执行此操作的一些示例,请参见http://jsuereth.com/scala/2013/06/11/effective-sbt.html(例如,规则4)。

如果习惯于使用build.sbt -type构建,则设置的位置不一定很清楚,因为在该文件中,会自动将评估为SBT设置(或设置序列)的行添加到根项目的设置中。

关于docker - 如何在Play的sbt-native-packager 0.8.0-M2中使用Docker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26232999/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com