我必须在我的 docker 容器内执行 shell 脚本
log-agent.sh
。
Dockerfile
FROM openjdk:11-jre
LABEL org.opencontainers.image.authors="[email protected]"
# Install AWS CLI
RUN apt-get update && \
apt-get install -y awscli && \
apt-get clean
VOLUME /tmp
ARG JAR_FILE
ARG PROFILE
ADD ${JAR_FILE} app.jar
ENV PROFILE_ENV=${PROFILE}
EXPOSE 8080
COPY entrypoint.sh /
COPY log-agent.sh /
# Set permissions for log-agent.sh
RUN chmod +x /log-agent.sh
# Use entrypoint.sh as the entry point
ENTRYPOINT ["/entrypoint.sh"]
# Execute log-agent.sh
# RUN /bin/bash -c '/logs/log-agent.sh'
CMD ["/bin/bash", "-c", "/log-agent.sh"]
入口点.sh
#!/bin/bash
# Run your script
/bin/bash /log-agent.sh
# Checking for lead detection level
if [ -z "$LEAK_DETECTION_LEVEL" ]
then
LEAK_DETECTION_LEVEL=advanced
fi
# Start the Spring Boot application
java -Dspring.profiles.active=${PROFILE_ENV} -XX:+UseG1GC -Dio.netty.leakDetection.level=${LEAK_DETECTION_LEVEL} -Djava.security.egd=file:/dev/./urandom -Dloader.main=com.adtech.DemoApplication -jar app.jar
应用程序启动成功,但容器没有执行脚本。日志中也没有错误。 这是我已经验证过的:
有什么建议吗?
基本上,不通常同时使用 CMD 和 ENTRYPOINT 。如果这样做,cmd 指令将作为简单参数附加到入口点。在你的情况下是这样的:
ENTRYPOINT["/entrypoint.sh", "/bin/bash", "-c", "/log-agent.sh"]
更多详情请看这里说明
无论如何,你有这些选择
#1 主管
[program:java]
command=/entrypoint.sh
autorestart=false
autostart=true
process_name=java-app
[program:java]
command=/log-agent.sh
autorestart=false
autostart=true
process_name=agent
更多详情请点击这里:#2 将代理发送到后台
#launch agent
nohup /log-agent.sh >/dev/null 2>&1 &
#launch java app
java -jar ....
ENTRYPOINT ["/entrypoint.sh"]
结尾