【Docker】Notes de débogage Docker

Notes de débogage Docker

./Fichier Docker

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' .

Pas de problème, l'image a été créée avec succès, puis il y a eu un problème lors de l'exécution

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

À ce stade, il devrait y avoir un problème lors de l'exécution. Vérifions le journal d'exécution du conteneur.

docker logs [CONTAINER ID]

Il est très étrange de constater que l'erreur est signalée ModuleNotFoundError: No module named 'utils'
insérer la description de l'image ici
, car elle peut fonctionner normalement avec gunicorn directement sans utiliser docker.
Après un long moment de débogage, j'ai finalement trouvé l'intérêt de cet immense gouffre avec l'aide d'un mentor.

Après le processus de débogage

Nous voulons entrer dans le conteneur Docker pour afficher les informations pertinentes, mais nous avons besoin que le conteneur s'exécute d'abord, mais maintenant le conteneur ne peut pas s'exécuter du tout.
La raison de l'analyse est que lorsque le conteneur exécute la commande CMD, il signale une erreur et ne parvient pas à s'exécuter. Modifiez la commande CMD en une commande qui n'est pas liée à la structure du code, afin que le conteneur puisse s'exécuter correctement et qu'il soit pratique pour nous de déboguer. Ici, nous utilisons python -m http.server pour réaliser cette idée
Dockerfile modifié

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"]

Après la modification, re-docker build et docker run, et le conteneur s'exécutera avec succès à ce moment-là.
Nous entrons dans le conteneur pour vérifier :

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

Saisissez avec succès, vérifiez la structure du code :
insérer la description de l'image ici
regardez notre structure de code d'origine :
insérer la description de l'image ici
selon cette instruction dans le Dockerfile, nous nous attendons à copier toutes les structures du dossier src du répertoire local dans le répertoire de travail/application Docker.

COPY src/* /app/

Cependant, il a été constaté qu'il n'y avait pas de structure de sous-dossier attendue, mais que tous les fichiers du sous-dossier ont été copiés directement dans /app, de sorte que la structure de référence dans le code source a également signalé une erreur lors de son exécution dans le conteneur
from utils.lark import *.

Méthode de modification

Modifiez simplement le 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"]

Reconstruisez, exécutez, exécutez avec succès, entrez dans le conteneur pour voir que la structure
insérer la description de l'image ici
est cohérente avec notre structure attendue et le problème est résolu.
PS : Quittez la commande conteneur :exit

Je suppose que tu aimes

Origine blog.csdn.net/MarsherS/article/details/125648956
conseillé
Classement