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

通过docker-compose向Spring Boot应用程序传递JAVA_OPTS

廖绍辉
2023-03-14

我正在使用下面的配置创建一个docker映像。一旦image准备就绪,我想要将JAVA_OPTS传递给我的docker容器,这样它就可以传递给我的Spring Boot应用程序。每当我尝试打开容器时,我就会得到“Runtime create Failed:CONTAINER_Linux.go:348:starting container process caused”exec:\“java$JAVA_OPTS\”:在$PATH中找不到可执行文件“:unknown”错误。我是不是漏掉了什么?任何帮助都是非常感激的

DockerFile

FROM openjdk:8-jdk-alpine

LABEL maintainer="myname@test.com"

# Add a volume pointing to /tmp
VOLUME /tmp

# Make port 8080 available to the world outside this container
EXPOSE 8080

# The application's jar file
ARG JAR_FILE=target/my.jar

# Add the application's jar to the container
ADD ${JAR_FILE} my.jar

ENV JAVA_OPTS=""
# Run the jar file 
ENTRYPOINT ["java $JAVA_OPTS","-Djava.security.egd=file:/dev/./urandom","-jar","/my.jar"]

Docker-Compose

version: '2.1'
services:
  service1:
    hostname: test
    domainname: mydomain.com
    image: myimage:latest
    container_name: test-container
    environment:
      - JAVA_OPTS=-Dapp.clients.scheme=http -Dapp.clients.port=9096 -Dserver.port=8082
    ports:
      - "8082:8082"         

共有1个答案

童华池
2023-03-14

不应将java$java_opts入口点[“sh”,“-c”,“java$java_opts”]一起使用

它的主要问题是,使用这种方法,您的应用程序将不会接收到sigterm,因此在正常关闭的情况下,它将不会对您起作用(如果您不知道这一点,您将在这里找到更多有关问题的信息)

如果希望在docker环境中自定义java选项,请使用java_tool_options环境属性(https://docs.oracle.com/javase/8/docs/technotes/guides/trobleshoot/envvars002.html)和entrypoint[“java”,...]

使用此属性,您甚至可以在Dockerfile中声明所需的选项,如:

ENV JAVA_TOOL_OPTIONS "-XX:MaxRAMPercentage=80"

以后可以使用外部提供的docker或kubernetes属性轻松地重写它。

jib项目使用java_tool_options-此处提供更多信息

 类似资料:
  • 我怎么做 使用Docker编写文件从Terraform脚本构建Azure应用程序服务 docker-compose.yaml代码段网 有什么想法吗?

  • 我遇到了几个问题。以下是我的docker文件: vue.js应用程序的Dockerfile。 是通过节点的对象存储和访问的,似乎是在生成时传入的。 我是否可以访问vue.js应用程序中docker-compose.yml中设置的容器级变量?此外,是否可以将这些变量作为参数与一起传递?如果你需要任何澄清/更多信息,请告诉我。

  • 当在docker容器中实现Java应用程序和在自己的docker容器中配置的MySQL数据库以及Docker Comuse时,在使用jdbc创建到数据库的连接时,Java应用程序中总是会出现以下错误: 相应的Docker文件和Java代码如下所示:Docker compose。yml:版本:“3.7” Java中的JDBC连接: Dockerfile: 有人有或知道这个问题吗?谢谢你的回答。

  • 我想问一下,是否可以通过一个JavaFX类传递一个变量,什么将应用程序扩展到我的JavaFX控制器?我对JavaFx非常陌生,可能只需要一点点。 目标是将一个Id从MyClass传递给MyController。 我的应用程序类: 我的控制器:

  • 我正在尝试向容器提供静态IP地址。我知道我必须创建一个自定义网络。我创建它并且桥接接口在主机(Ubuntu 16. x)上。容器从此子网获取IP,但不是我提供的静态。 这是我的docker-compose.yml: 容器10.5.0.2和10.5.0.3,而不是5和6。

  • 我的React客户端的Dockerfile: 我的Express后端的Dockerfile: 我的码头工人。项目根目录中的yml文件: 我的服务器。我的后端文件夹下的js文件: 当我跑的时候: 我得到以下输出在我的终端: 我的后端以代码0退出,我无法加载我的应用程序。我的后端正在运行。 我做错了什么,如何让我的React-Express Node应用程序与Docker Comment一起运行?