我有一个 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 进程?
好的,有两个问题:
首先,我必须向 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"]