docker环境下java参数传递与获取

发布于:2025-06-27 ⋅ 阅读:(12) ⋅ 点赞:(0)

docker环境下java参数传递与获取

// docker-compose.yml -> environment -> USER
String userEnv = System.getenv("USER");

// java -jar xxx.jar --user=jackson
String userArg = Stream.of(args).filter(arg -> arg.contains("--user")).map(arg -> StringUtils.substringAfter(arg, "=")).collect(Collectors.joining());

// java -jar -Duser=jackson xxx.jar
String userProp = System.getProperty("user", "");

// 按优先级获取
String userName = StringUtils.defaultIfBlank(userEnv, StringUtils.defaultIfBlank(userArg, userProp));

一,java命令行赋值

#args
java -jar docker-java-params-0.0.1.jar --user=jackson

#系统属性
java -jar -Duser=jackson docker-java-params-0.0.1.jar

二,docker run赋值

#环境变量、args
docker run -e USER='user001' registry.cn-shanghai.aliyuncs.com/00fly/docker-java-params:0.0.1 --user='jackson'

三,docker-compose赋值

优先环境变量方式,同时也支持args、系统属性

新建docker-compose.yml

services:
  docker-java-params:
    image: registry.cn-shanghai.aliyuncs.com/00fly/docker-java-params:0.0.1
    container_name: docker-java-params
    command: --user="user by args"
    entrypoint: java -server -Djava.security.egd=file:/dev/./urandom -Xshareclasses -Xquickstart -Duser="user by prop" -jar /app.jar
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 32M
        reservations:
          cpus: '0.05'
          memory: 32M
    restart: on-failure
    environment:
    - USER=user by env
    logging:
      driver: json-file
      options:
        max-size: 5m
        max-file: '1'

同级目录下执行命令

docker-compose up -d && docker logs -f docker-java-params
[+] Running 1/1
 ✔ Container docker-java-params  Started   
[main] INFO com.fly.simple.MainRun - userEnv: user by env
[main] INFO com.fly.simple.MainRun - userArg: user by args
[main] INFO com.fly.simple.MainRun - userProp: user by prop
[main] INFO com.fly.simple.MainRun - userName: user by env

并且支持占位符

services:
  docker-java-params:
    image: registry.cn-shanghai.aliyuncs.com/00fly/docker-java-params:0.0.1
    container_name: docker-java-params
    command: '--user="${USER2}"'
    entrypoint: 'java -server -Djava.security.egd=file:/dev/./urandom -Xshareclasses -Xquickstart -Duser=${USER3} -jar /app.jar'
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 32M
        reservations:
          cpus: '0.05'
          memory: 32M
    restart: on-failure
    environment:
    - USER=${USER1}
    logging:
      driver: json-file
      options:
        max-size: 5m
        max-file: '1'

占位符传递参数

docker-compose down && USER1='user001' USER2='user002' USER3='user003' docker-compose up -d && docker logs -f docker-java-params 

感兴趣的话,你也来试试吧!

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-


网站公告

今日签到

点亮在社区的每一天
去签到