当前位置: 首页 > 知识库问答 >
问题:

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

长孙文栋
2023-03-14

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

bash -xe docker-entrypoint.sh
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"]
#!/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个答案

拓拔松
2023-03-14

我建议改用SBT本机打包器。我的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

 类似资料:
  • Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。 Hello world 现在让我们来试试 $ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world 刚才你启动了你的第一个容器! 那么刚才发生了什么? 我们逐步来分析 docker run 命令做了哪些事情。 首先,

  • 我最近几天的问题是,我正在尝试加密我的一些项目,我正在工作。由于Docker对我来说是一个很好的解决方案(如果它在本地运行,它将在远程运行),据我所知,我得到了3层可以实现我的ssl证书。第一层是实例或虚拟机(在我的例子中是本地的,aws或Google)。第二层是Docker守护进程(充当服务器或所有运行容器的管理器),最后一层是运行在jdk-alpine环境(可能是tomcat服务器)上的spr

  • 我是新来的docker和有一个简单的DW(dropwizard)应用程序连接到elasticsearch,其中已经运行在docker使用docker-compose.yml,其中有以下内容。 弹性搜索的Docker-compose.yml 注意:我将8200和8300公开为主机(本地mac系统)上的ES端口 现在,当我在本地主机上运行连接到8200中ES的DW应用程序时,一切都正常了,但现在我正在

  • Docker在容器内运行应用程序。在一个容器内运行一个应用程序需要一个命令:docker run。 Hello word 让我们现在来试试 $ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world 刚刚你运行了你的第一个容器! 所以刚才发生了什么?让我们来看看docker run运行了哪些步骤。 首先,我们指定了dock

  • 其基本思想是运行带有音频和ui的应用程序(vlc、firefox、skype…) 我在使用pulseaudio搜索docker容器,但我找到的所有容器都在TCP上使用pulseaudio流。(应用程序的安全沙箱) https://gist.github.com/hybris42/ce429de428e5af3a344a https://github.com/jlund/docker-chrome-

  • 问题内容: 我正在尝试运行此项目-https://github.com/JumboInteractiveLimited/codetest 我已经下载了Docker工具箱,并执行了GitHub页面上提到的build和run命令,但是当我尝试访问http:localhost:8080时,该页面仍然不可用。 当我尝试再次执行运行时,Docker说 编辑 :澄清一下,我只有在第二次运行时才收到该错误。当我