在 Dockerfile 中运行多个 shell 脚本

问题描述 投票:0回答:1

我必须在我的 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

应用程序启动成功,但容器没有执行脚本。日志中也没有错误。 这是我已经验证过的:

  1. 文件位置。
  2. 文件权限。
  3. 验证 shell 脚本的正确性。 (正确的 shebang 运算符)
  4. 如果使用 docker exec 命令从容器手动执行,脚本将正确执行

有什么建议吗?

docker shell dockerfile
1个回答
0
投票

为什么不运行?

基本上,不通常同时使用 CMD 和 ENTRYPOINT 。如果这样做,cmd 指令将作为简单参数附加到入口点。在你的情况下是这样的:

ENTRYPOINT["/entrypoint.sh", "/bin/bash", "-c", "/log-agent.sh"]
更多详情请看这里

  • Docker 入口点和 cmd 在一起
说明

在docker中,只能运行一个前台进程。在一个容器中执行多个进程并不是一种好的做法。

无论如何,你有这些选择

#1 主管

使用supervisor,你可以在一个容器中运行多个进程。例如:postgress + java。在你的情况下,主管配置文件可能是这样的

[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
更多详情请点击这里:

如何将多个服务打包到一个docker镜像中?

#2 将代理发送到后台

    首先,java 和代理启动应该在您的entrypoint.sh 中
  • 代理应该在java之前启动到后台
类似这样的事情

#launch agent nohup /log-agent.sh >/dev/null 2>&1 & #launch java app java -jar ....

    你的 Dockerfile 应该以
  • ENTRYPOINT ["/entrypoint.sh"]
     结尾
    
© www.soinside.com 2019 - 2024. All rights reserved.