【Docker】Notas de depuración de Docker

Notas de depuración de Docker

./Dockerfile

FROM python:3.10
WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY src/* /app/


CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]
docker build -t 'noticedemo' .

No hay problema, la imagen se creó correctamente y luego hubo un problema al ejecutar

docker run -d -p 3000:3000 noticedemo
docker ps  # 发现容器并不在运行列表
docker ps -a # 容器在列表,并未运行

En este momento, debería haber un problema al ejecutar, verifiquemos el registro de ejecución del contenedor.

docker logs [CONTAINER ID]

Es muy extraño encontrar que se informa el error ModuleNotFoundError: No module named 'utils'
inserte la descripción de la imagen aquí
, porque Gunicorn se puede ejecutar normalmente directamente sin usar Docker.
Después de mucho tiempo de depuración, finalmente encontré el significado de este enorme pozo con la ayuda de mi mentor.

Después del proceso de depuración

Queremos ingresar al contenedor acoplable para ver información relevante, pero necesitamos que el contenedor se ejecute primero, pero ahora el contenedor no puede ejecutarse en absoluto.
El motivo del análisis es que cuando el contenedor ejecuta el comando CMD, informa un error y no se ejecuta. Modifique el comando CMD a un comando que no esté relacionado con la estructura del código, para que el contenedor pueda ejecutarse con éxito y sea Es conveniente para nosotros depurar. Aquí usamos python -m http.server para lograr esta idea
Dockerfile modificado

FROM python:3.10
WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY src/* /app/


# CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]
CMD ["python", "-m", "http.server"]

Después de la modificación, vuelva a compilar y ejecutar la ventana acoplable, y el contenedor se ejecutará correctamente en este momento.
Entramos en el contenedor para comprobar:

docker exec -it [CONTAINER ID] /bin/bash

Ingresado exitosamente, verifique la estructura del código:
inserte la descripción de la imagen aquí
Mire nuestra estructura de código original:
inserte la descripción de la imagen aquí
De acuerdo con esta instrucción en el Dockerfile, lo que esperamos es copiar todas las estructuras en la carpeta src del directorio local al directorio de trabajo/aplicación de Docker.

COPY src/* /app/

Sin embargo, se descubrió que no había una estructura de subcarpeta esperada, pero todos los archivos en la subcarpeta se copiaron directamente a /app, por lo que la estructura de referencia en el código fuente también informó un error cuando se estaba ejecutando en el contenedor
from utils.lark import *.

Método de modificación

Simplemente modifica el Dockerfile

FROM python:3.10
WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY src /app # COPY src/* /app/


CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]

Reconstruya, ejecute, ejecute con éxito, ingrese al contenedor para ver que la estructura
inserte la descripción de la imagen aquí
es consistente con nuestra estructura esperada y el problema está resuelto.
PD: salga del comando contenedor:exit

Supongo que te gusta

Origin blog.csdn.net/MarsherS/article/details/125648956
Recomendado
Clasificación