如记录在https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact https://docs.docker.com/engine/reference/builder/#understand-how-cmd-and-entrypoint-interact,如果你结合“壳形式”CMD
and ENTRYPOINT
, the CMD
规范省略:
所以你应该使用“exec form”并编写如下内容:
…
ENTRYPOINT ["/usr/bin/chamber", "exec", "${ENV}_${SERVICE_NAME}", "-r", "1", "--", "./entrypoint.sh"]
CMD ["java -jar", "-Dspring.profiles.active=docker", "target/my.jar"]
However 这不会按原样工作,因为${ENV}
and ${SERVICE_NAME}
不会被扩展(因为需要 shell)。
因此,这里应用的最简单、正确的解决方案是重构你的entrypoint.sh
,或者如果您不想更改它并且仍然依赖具有“exec form”的环境变量ENTRYPOINT
,你可以这样写:
…
RUN chmod a+x entrypoint1.sh
ENTRYPOINT ["./entrypoint1.sh"]
CMD ["java -jar", "-Dspring.profiles.active=docker", "target/my.jar"]
有一个文件
入口点1.sh
#!/bin/bash
exec /usr/bin/chamber exec ${ENV}_${SERVICE_NAME} -r 1 -- ./entrypoint.sh "$@"