在docker中运行的akka​​-http应用程序

时间:2017-04-22 10:22:41

标签: docker dockerfile akka-http

我有一个在本地工作正常的akka​​-http应用程序,我有一些问题“停靠”应用程序。我通过Dockerfile构建docker镜像,并使用docker-entrypoint执行java -jar命令。当我第一次访问正在运行的docker容器时,应用程序没有运行,但是如果我访问容器并手动执行java -jar命令,则应用程序启动正常。如果我执行以下命令(在容器内),应用程序也会正常启动:

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"]

另请参阅我的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

有没有人知道为什么我的应用程序在运行容器时会被杀死?

1 个答案:

答案 0 :(得分:0)

我建议改用SBT Native Packager。我的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中的repo,然后您可以通过调用sbt docker:publish来构建和部署它。如果要在本地发布Docker镜像,请调用sbt docker:publishLocal