我有一个在底层使用 Azure 服务总线的 Python 脚本。它是一个模拟,因此它使用 Pub Sub 和主题通过服务总线进行通信,并打印有关某些事件的信息。
我制作了一个 Dockerfile,用于安装所有要求、从 Azure 设置 ENV 变量并运行启动模拟的文件。
当我使用
docker run <image>
在本地运行 Docker 映像时,它什么也不做,直到运行完成,然后它会吐出所有日志。
当我使用
docker run -it <image>
在本地运行 Docker 镜像时,我可以一一看到所有日志。
我将映像推送到 Azure 容器注册表,并使用该映像创建了一个 Docker 容器实例。当我运行容器并使用
az container logs <rg> <name>
或 az container attach <rg> <name>
时,它不会像使用 docker run -it
命令那样显示日志,而是在模拟全部完成后将其吐出。
可以实时查看日志吗?
我尝试的是通过在 Azure 中按“播放”来运行容器实例,然后在“日志”选项卡中查看日志。但是当容器运行时,它会说:“没有可用的日志”。然后我尝试了上面提到的 Azure Cloud Shell 命令,但它仍然不显示日志。
检查您是否使用像
logging
这样的日志库,并将其配置为将日志输出到 STDOUT 或 STDERR。您可以通过在脚本开头或配置日志记录的任何位置添加以下行来完成此操作:
import sys
import logging
# Configure logging to output to STDOUT
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
确保脚本生成的任何日志都是使用
logging
模块写入的。
更新 Dockerfile 以包含复制 Python 脚本和任何其他必要文件、安装依赖项以及根据需要设置环境变量的说明。 Dockerfile:
FROM python:3.9
# Set working directory
WORKDIR /app
# Copy requirements file
COPY requirements.txt .
# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Copy the Python script
COPY your_script.py .
# Set environment variables if needed
ENV VARIABLE_NAME=value
# Command to run the Python script
CMD ["python", "your_script.py"]
在项目目录中构建Docker镜像。
docker build -t your_image_name .
docker push your_registry_name.azurecr.io/your_image_name:tag
az container create \
--resource-group your_resource_group \
--name your_container_name \
--image your_registry_name.azurecr.io/your_image_name:tag \
--cpu 1 \
--memory 1.5 \
--restart-policy OnFailure \
--dns-name-label your_dns_name_label \
--ports 80
az container logs --resource-group your_resource_group --name your_container_name
日志: