我对 Docker 和 Azure 还很陌生,但是当我将容器部署到容器实例时,启动命令似乎不起作用;我不知道为什么。我没有收到来自 Azure 容器的日志。
Docker 文件
FROM --platform=linux/amd64 ubuntu:20.04
ENV DEBIAN_FRONTEND noninteractive
# set default java environment variable
ENV JAVA_VERSION_MAJOR=8 \
JAVA_VERSION_MINOR=111 \
JAVA_HOME=/usr/lib/jvm/default-jvm \
PATH=${PATH}:/usr/lib/jvm/default-jvm/bin/
RUN apt-get update && \
apt-get upgrade -y && \
apt install openjdk-11-jdk -yq && \
apt install openjdk-17-jdk -yq
RUN apt-get update && \
apt install openjdk-8-jdk -yq && \
ln -s /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/default-jvm && \
apt-get clean all
# Check Java version
RUN java -version && \
javac -version
# Install linux packages
RUN apt-get update
RUN apt-get -qq -y install software-properties-common git curl build-essential subversion perl wget unzip vim bc
RUN apt-get install maven -yq
# Setup Apache Maven
ENV MAVEN_OPTS="-Xms256m -Xmx2048m"
# Check Maven version
RUN mvn -version
# Install Python
RUN add-apt-repository -y ppa:deadsnakes/ppa
RUN apt-get update
RUN apt-get install -y --no-install-recommends python3.9 python3.9-dev python3-pip python3-setuptools python3-wheel gcc
RUN python3.9 -m pip install pip --upgrade
RUN echo 'alias python=python3.9' >> /root/.bashrc
# RUN apt-get install pkg-config
# RUN apt-get install libcairo2-dev -yq
# RUN pip install argparse
# RUN pip freeze > requirements.txt
# RUN pip install -r requirements.txt
WORKDIR /root
COPY ./MOSALLISA-Testing /root/framework
ENV FRAMEWORK_HOME="/root/framework"
# COPY ../vimrc .vimrc
ENV JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
ENV TMP_DIR="/tmp"
ENV PYTHONIOENCODING=utf-8
# install Maven 3.8.1
RUN wget https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz -P /tmp
RUN tar -xzvf /tmp/apache-maven-3.8.1-bin.tar.gz -C /opt
# install Maven 3.8.6
RUN wget https://archive.apache.org/dist/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz -P /tmp
RUN tar -xzvf /tmp/apache-maven-3.8.6-bin.tar.gz -C /opt
# install gradle
RUN git config --global --add safe.directory '*'
# install python libraries
# COPY ../requirements.txt /tmp/requirements.txt
RUN python3.9 -m pip install --only-binary :all: numpy==1.21.4
RUN python3.9 -m pip install -r framework/Docker/requirements.txt
# non GHRB dependancies
RUN pip install azure-storage-blob
RUN pip install python-dotenv
ENV EVOSUITE="/root/framework/MOSAllisaJars/evosuite-1.2.0.jar"
RUN echo "EVOSUITE during build: $EVOSUITE"
RUN echo 'alias evosuite="java -jar $EVOSUITE"' >> /root/.bashrc
WORKDIR /root/framework
#This command is failing in Azure
CMD ["python3.9", "/root/framework/execute_results_testing.py"]
启动容器实例bash文件
REPOS=("sslcontext-kickstart")
for i in "${!REPOS[@]}"; do
az container create \
--resource-group $RESOURCE_GROUP \
--name "mosalisa-t$i" \
--image $IMAGE \
--dns-name-label "mosallisat$i" \
--environment-variables TEST_VERSION="REGRESSION_EVOSUITE" \
MOSALLISA_CONFIG="NORMAL" \
REPO="${REPOS[$i]}" \
AZ_STRGE_CONN_STR="$AZ_STRGE_CONN_STR" \
--registry-username $REGISTRY_USERNAME \
--registry-password $REGISTRY_PASSWORD \
--memory $MEMORY
done
本地启动容器文件
containername=$1
if [ -z "$containername" ]; then
containername="mosallisa_framework"
fi
docker ps -aq --filter "name=$containername" | grep -q . && docker stop $containername && docker rm $containername
docker run -dt --name $containername -v $(pwd):/root/framework \
-e TEST_VERSION="REGRESSION_EVOSUITE" \
-e MOSALLISA_CONFIG="NORMAL" \
-e REPO="sslcontext-kickstart" \
-e AZ_STRGE_CONN_STR="$AZ_STRGE_CONN_STR" \
mosallisa_framework:latest
# Execute bash inside the running container
我尝试在本地运行它,它按预期工作并生成日志。我还尝试在启动期间手动记录到文件,azure 容器启动命令,但 python 文件不输出任何内容,本地运行的版本也能够输出到日志文件。我手动进入容器并运行相同的命令,效果很好。
同意@Vivek Vaibhav Shandilya 的评论。
tail -f /dev/null
添加到您的代码末尾,如下所示。CMD ["python3.9", "/root/framework/execute_results_testing.py", "&&", "tail", "-f", "/dev/null"]
开始.sh:
echo "Executing Python script..."
python3.9 /root/framework/execute_results_testing.py
echo "Python script finished. Keeping container alive..."
tail -f /dev/null
本地日志:
进行上述更改后,我的容器成功保持活动状态而无需重新启动。
来自 Azure 容器实例的日志: