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-