【Docker】Notas de depuração do Docker

Notas de depuração do 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' .

Não tem problema, a imagem foi construída com sucesso e houve um problema ao executar

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

Neste momento, deve haver um problema durante a execução, vamos verificar o log de execução do contêiner.

docker logs [CONTAINER ID]

É muito estranho descobrir que o erro é relatado ModuleNotFoundError: No module named 'utils'
insira a descrição da imagem aqui
, pois ele pode rodar normalmente com o gunicorn diretamente, sem usar o docker.
Depois de muito tempo de depuração, finalmente encontrei o ponto desse enorme buraco com a ajuda do mentor.

Após o processo de depuração

Queremos entrar no contêiner docker para visualizar informações relevantes, mas precisamos que o contêiner seja executado primeiro, mas agora o contêiner não pode ser executado.
O motivo da análise é que quando o contêiner executa o comando CMD, ele relata um erro e falha na execução. Modifique o comando CMD para um comando que não esteja relacionado à estrutura do código, para que o contêiner possa ser executado com sucesso e seja conveniente para depurarmos. Aqui usamos python -m http.server para realizar esta ideia
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"]

Após a modificação, re-docker build e docker run, e o contêiner será executado com sucesso neste momento.
Entramos no contêiner para verificar:

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

Inserido com sucesso, verifique a estrutura do código:
insira a descrição da imagem aqui
Veja nossa estrutura de código original:
insira a descrição da imagem aqui
De acordo com esta instrução no Dockerfile, o que esperamos é copiar todas as estruturas na pasta src do diretório local para o diretório de trabalho/app do docker

COPY src/* /app/

No entanto, descobriu-se que não havia estrutura de subpasta esperada, mas todos os arquivos na subpasta foram copiados diretamente para /app, portanto, a estrutura de referência no código-fonte também relatou um erro quando estava sendo executada no contêiner
from utils.lark import *.

Método de modificação

Basta modificar o 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"]

Reconstrua, execute, execute com sucesso, entre no contêiner para ver se a estrutura
insira a descrição da imagem aqui
é consistente com nossa estrutura esperada e o problema está resolvido.
PS: Saia do comando do contêiner:exit

Acho que você gosta

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