Shell 脚本未在 Docker 容器中启动 java 进程

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

我有一个 Docker Ubuntu 24.04 映像,并尝试通过 shell 脚本运行 Java 进程。我计划将其部署到 Kubernetes,因此我需要在容器启动后运行代理。 Docker 映像构建得很好,我可以使用这个 shell 脚本在本地 Mac 计算机上启动该进程,如果我登录到容器,我可以在那里启动它,但我的代理不会从我的 Dockerfile 启动,除非我手动登录并运行 shell 脚本。

FROM ubuntu:24.04

# Set environment variable
RUN apt-get update && \
    apt-get install -y unzip && \ 
    apt-get install -y tar && \
    rm -rf /var/lib/apt/lists/*

# Copy the Java tar file into the container
COPY jre-8u391-linux-aarch64.tar.gz /tmp/
COPY no-java.zip /tmp
ADD agent.config.properties /tmp/
RUN unzip /tmp/no-java.zip 

# Extract Java tar file
WORKDIR /no-java

RUN chmod +x install

RUN ./install -e -i /opt/agent -s http://localhost -p 8080 -l -q
RUN tar -xvf /tmp/jre-8u391-linux-aarch64.tar.gz -C /opt/java-agent/agent/bin/java
RUN mv /tmp/agent.config.properties /opt/java-agent/agent/bin/conf/
RUN rm -rf /tmp/no-java && rm -rf /no-java

CMD ["sh", "/opt/java-agent/agent/bin/run_agent.sh"]

COMD似乎没有启动代理;当我登录容器并执行顶部操作时,我可以看到它没有运行。如果在容器中手动运行 run_agent.sh 脚本,它将按预期启动代理:

 docker run -it agent /bin/sh
 sh /opt/java-agent/agent/bin/run_agent.sh

我尝试过 CMD 的各种迭代。

CMD ["/bin/sh","-c", "/opt/java-agent/agent/bin/run_agent.sh"]

但是还是不行。如何执行脚本并启动我的 Java 进程?

docker dockerfile
1个回答
0
投票

好的,有两个问题:

首先,我必须向 bin 目录中的 shell 脚本授予运行权限。其次,我将工作目录更改为 bin 文件夹,它工作并执行了该目录中的脚本,它工作了。

RUN find /opt/java-agent/agent/ -type f -name "*.sh" -exec chmod +x {} \;
WORKDIR /opt/java-agent/agent/bin
CMD ["sh","run_agent.sh"]
© www.soinside.com 2019 - 2024. All rights reserved.