在docker内部运行的akka http应用程序
我有一个akka http应用程序,在本地运行良好,我在“对接”应用程序时遇到了一些问题。我通过Dockerfile构建docker映像,并使用docker入口点执行java-jar命令。当我第一次访问正在运行的docker容器时,应用程序没有运行,尽管如果我访问容器并手动执行java-jar命令,应用程序启动正常。如果执行以下命令(在容器内),应用程序也会正常启动:在docker内部运行的akka http应用程序,docker,dockerfile,akka-http,Docker,Dockerfile,Akka Http,我有一个akka http应用程序,在本地运行良好,我在“对接”应用程序时遇到了一些问题。我通过Dockerfile构建docker映像,并使用docker入口点执行java-jar命令。当我第一次访问正在运行的docker容器时,应用程序没有运行,尽管如果我访问容器并手动执行java-jar命令,应用程序启动正常。如果执行以下命令(在容器内),应用程序也会正常启动: bash -xe docker-entrypoint.sh 见下面我的Dockerfile FROM qa.stratio.c
bash -xe docker-entrypoint.sh
见下面我的Dockerfile
FROM qa.stratio.com/stratio/ubuntu-base:16.04
MAINTAINER stratio
ARG VERSION
RUN apt-get update && apt-get install -y screen
COPY target/khermes-${VERSION}-allinone.jar /khermes.jar
COPY docker/docker-entrypoint.sh /
COPY src/main/resources/application.conf /
EXPOSE 8080
ENTRYPOINT ["/docker-entrypoint.sh"]
另请参见下面的my docker-entrypoint.sh:
#!/bin/bash -xe
java -jar -Dkhermes.client=false -Dakka.remote.hostname=localhost -
Dakka.remote.netty.tcp.port=2553 -Dakka.cluster.seed-
nodes.0=akka.tcp://khermes@localhost:2552 /khermes.jar
tail -f /dev/null
有人知道为什么在我运行容器时我的应用程序会被杀死吗 我建议改用。我的build.scala
如下所示
import com.typesafe.sbt.packager.archetypes.JavaAppPackaging
import com.typesafe.sbt.packager.docker.{Cmd, DockerPlugin}
import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport._
import sbt._
import Keys._
object build extends Build {
lazy val root: Project = Project(
id = "my-awesome-server",
base = file("."),
settings = Defaults.coreDefaultSettings ++ Seq(
resolvers ++= {
Seq(
"sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
},
organization := "co.awesome-startup",
version := "2.69",
scalaVersion := "2.11.8",
libraryDependencies ++= {
Seq(
"org.tpolecat" %% "atto-core" % "0.4.2" withSources()
)
},
dockerBaseImage := "expert/docker-java-minimal:server-jre",
dockerCommands := dockerCommands.value.flatMap {
case cmd@Cmd("FROM", _) => List(cmd, Cmd("RUN", "apk update && apk add bash"))
case other => List(other)
},
dockerRepository := Some("awesome-startup"),
version in Docker := version.value,
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8", "-language:implicitConversions", "-language:postfixOps", "-language:higherKinds", "-Xcheckinit"), //, "-Xlog-implicits"),
javaOptions in compile += "-g:source,lines,vars",
crossPaths := false,
mainClass in Compile := Some("co.awesome-startup.server.EntryPoint")
)
).enablePlugins(JavaAppPackaging).
enablePlugins(DockerPlugin)
}
您需要更改项目名称和dockerRepository
以匹配Docker Hub中的回购,然后您可以通过调用sbt Docker:publish来构建和部署它。如果您想在本地发布Docker映像,请调用sbt Docker:publishLocal
我建议改用。我的build.scala
如下所示
import com.typesafe.sbt.packager.archetypes.JavaAppPackaging
import com.typesafe.sbt.packager.docker.{Cmd, DockerPlugin}
import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport._
import sbt._
import Keys._
object build extends Build {
lazy val root: Project = Project(
id = "my-awesome-server",
base = file("."),
settings = Defaults.coreDefaultSettings ++ Seq(
resolvers ++= {
Seq(
"sonatype snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"
},
organization := "co.awesome-startup",
version := "2.69",
scalaVersion := "2.11.8",
libraryDependencies ++= {
Seq(
"org.tpolecat" %% "atto-core" % "0.4.2" withSources()
)
},
dockerBaseImage := "expert/docker-java-minimal:server-jre",
dockerCommands := dockerCommands.value.flatMap {
case cmd@Cmd("FROM", _) => List(cmd, Cmd("RUN", "apk update && apk add bash"))
case other => List(other)
},
dockerRepository := Some("awesome-startup"),
version in Docker := version.value,
scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8", "-language:implicitConversions", "-language:postfixOps", "-language:higherKinds", "-Xcheckinit"), //, "-Xlog-implicits"),
javaOptions in compile += "-g:source,lines,vars",
crossPaths := false,
mainClass in Compile := Some("co.awesome-startup.server.EntryPoint")
)
).enablePlugins(JavaAppPackaging).
enablePlugins(DockerPlugin)
}
您需要更改项目名称和dockerRepository
以匹配Docker Hub中的回购,然后您可以通过调用sbt Docker:publish来构建和部署它。如果要在本地发布Docker图像,请调用sbt Docker:publishLocal