java - 如何允许用户使用不同的参数运行 Docker 应用程序
问题描述
我为我的 Java 应用程序构建了一个Docker映像 - https://bitbucket.org/ijabz/songkongdocker/src/master/Dockerfile
最后一行是
CMD /opt/songkong/songkongremote.sh
songremote.sh 的(简化)内容是
#!/bin/sh
umask 000
./jre/bin/java-jar lib/songkong-6.9.jar -r
它工作正常。
但是我有一个客户想要使用 -m 选项和路径来运行 Songkong
例如
#!/bin/sh
umask 000
./jre/bin/java-jar lib/songkong-6.9.jar -m /users/music
那么有没有一种方法可以让单个 docker 允许运行两个不同的命令,或者我必须构建另一个 docker。
无论哪种方式,我如何允许 /users/music 由用户提供
Songkongremote 的完整内容有点复杂,因为必须将更多选项传递给 Java
#!/bin/sh umask 000 ./jre/bin/java -XX:MaxRAMPercentage=60 -XX:MetaspaceSize=45 -Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog - Dorg.jboss.logging.provider=jdk -Djava.util.logging.config.class=com.jthink.songkong.logging.StandardLogging -Dhttps.protocols=TLSv1.1,TLSv1.2 --add-opens java.base/ java.lang=ALL-UNNAMED -jar lib/songkong-6.9.jar -r
更新 我遵循 Cascaders 的回答,它已经做了一些事情(查看执行命令)
但是songkong.sh的行为就好像根本没有传递任何参数(而不是传递了 -r 选项)。
songkong.sh(从 songkongremote.sh 重命名)现在包含
#!/bin/sh
umask 000
./jre/bin/java -XX:MaxRAMPercentage=60 -XX:MetaspaceSize=45 -Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog -Dorg.jboss.logging.provider=jdk -Djava.util.logging.config.class=com.jthink.songkong.logging.StandardLogging -Dhttps.protocols=TLSv1.1,TLSv1.2 --add-opens java.base/java.lang=ALL-UNNAMED -jar lib/songkong-6.10.jar "$@"
现在 Dockerfile 结束了
EXPOSE 4567
ENTRYPOINT ["/sbin/tini"]
# Config, License, Logs, Reports and Internal Database
VOLUME /songkong
# Music folder should be mounted here
VOLUME /music
WORKDIR /opt/songkong
ENTRYPOINT /opt/songkong/songkong.sh
CMD ["-r"]
我不明白是否有两个入口点或 sbin/tini 之一的意义
解决方案
您可以尝试将ENTRY
point 用于命令,并且CMD
仅用于参数
ENTRYPOINT ["/sbin/tini", "/opt/songkong/songkongremote.sh" ]
CMD [] # Arguments are passed here
您还需要处理 .sh 文件中的参数:
#!/bin/sh
umask 000
./jre/bin/java-jar lib/songkong-6.9.jar "$@"
推荐阅读
- typescript - 返回 package.json 依赖项的各个值
- python - 对于 ws.rows[1:] 中的行:TypeError:“生成器”对象不可下标
- mysql - 从 sql 获取畅销产品
- ruby-on-rails - 为什么当 pgadmin 返回我期望的所有内容时,我只能从 Rails 中的 psql 查询中得到一个结果?
- sql - 在 CASE 语句中使用先前计算的值
- ios - 尝试从后台恢复时触发带有 AVAudioSessionInterruptionWasSuspendedKey 的 AVAudioSessionInterruptionNotification
- wordpress - 帖子 ID 链接结构不适用于自定义帖子类型
- php - PHP错误网页显示通知但不显示错误
- reactjs - 使用 React Router V4 时如何防止组件立即卸载
- node.js - Mongoose .find 查询结果包含查询元数据?不能只是手动投影集合的每个属性,如何只获取文档?