【Docker】Causas e soluções para várias falhas comuns

Docker é um contêiner relativamente simples de usar. Podemos obter informações das seguintes maneiras:

  1. Execute o comando através do docker run, podendo retornar informações
  2. Obtenha logs por meio de docker logs e execute filtragem direcionada
  3. Verifique o status do serviço docker por meio do docker de status systemctl
  4. Visualize registros por meio de journalctl -u docker.service

A seguir está uma coleção de problemas e falhas do contêiner do Docker, divididos em 9 categorias:


1. Falha de inicialização

1、docker: Não é possível conectar-se ao daemon Docker em unix:///var/run/docker.sock. O daemon do docker está em execução?

  • Motivo: o Docker não iniciou normalmente
  • Solução:
    systemctl start docker

2、Não é possível criar soquete unix /var/run/docker.sock: é um diretório

  • Motivo: docker.sock não pode ser criado
  • Solução:
    rm -rf /var/run/docker.sock
    reinicie o docker

3. Falha no trabalho para docker.service. Falha ao iniciar o aplicativo Docker

  • Causa: Causado pelo Selinux
  • Solução:
    /etc/sysconfig/selinux, altere o valor do selinux para desabilitado
    e reinicie o docker para resolver o problema

4、docker: Resposta de erro do daemon:
/var/lib/docker/overlay/XXXXXXXXXXXXXXXXXXXXXX: nenhum arquivo ou diretório.

  • Motivo: o docker não especificou um diretório ou arquivo
  • Solução:
    systemctl stop docker
    rm -rf /var/lib/docker/*
    systemctl start docker
    reinicie a imagem de execução para iniciar o contêiner

5、docker: Resposta de erro do daemon: Conflito. O nome do contêiner “XXX” já está em uso pelo contêiner “XXX”. Você deve remover (ou renomear) esse contêiner para poder reutilizar esse nome.

  • Razão: o nome do Docker tem o mesmo nome
  • Solução:
    renomeie o contêiner ou exclua e reconstrua o contêiner

6、Erro: Falha na ativação da conexão: Nenhum dispositivo adequado encontrado para esta conexão

  • Motivo: problema de configuração da placa de rede
  • Solução:
    reinicie a placa de rede

7. O Docker não pode ser iniciado após a reinicialização do sistema.
O erro relatado é: docker0: iptables: Nenhuma cadeia/destino/correspondência com esse nome

  • Motivo: problema de iptables do serviço docker
  • Solução:
    reinicie o sistema de serviço do docker, reinicie o docker

8. Erro ao iniciar o daemon: erro ao inicializar o graphdriver: erro de driver não suportado
ao iniciar o daemon do docker usando o driver de armazenamento overlay2

  • Razão: daemon não tem configuração
  • Solução:
    Adicione configuração:
    /etc/docker/daemon.json
    {“storage-driver”: “overlay2”,
    “storage-opts”: [“overlay2.override_kernel_check=true”]}

9、Falha ao iniciar docker.service: a unidade docker.service está mascarada.

  • Desconhecido - Motivo: o docker está mascarado
  • Solução:
    systemctl unmask docker.service
    systemctl unmask docker.socket
    systemctl start docker.service

10、Falha ao iniciar docker.service: a unidade não está carregada corretamente: argumento inválido.

  • Desconhecido - Motivo: O serviço docker não pode ser carregado normalmente
  • Solução:
    desinstale o docker, exclua docker.service
    e reinstale o docker

11. Docker-compose relata um erro ao iniciar o contêiner:
/usr/lib/python2.7/site-packages/requests/init.py:80: RequestsDependencyWarning: urllib3 (1.22) ou chardet (2.2.1) não corresponde a uma versão suportada! RequestsDependencyWarning)

  • Desconhecido - Motivo: a versão do componente correspondente do pip não é suportada
  • Solução:
    pip uninstall urllib3
    pip uninstall chardet
    pip install requests

12. Falha na reinicialização do contêiner do Docker.
Depois de encerrar o processo do Docker à força, reinicie o Docker. O contêiner no docker não pode ser iniciado e o erro
docker restart XXXXXXX Resposta de erro do daemon: Não é possível reiniciar o contêiner XXXXXXX: contêiner “XXXXXXXXXXXXXX”: já existe

  • Motivo: O contêiner antigo não saiu com segurança
  • Solução:
    docker-containerd-ctr --address /run/docker/containerd/docker-containerd.sock --namespace c rm <容器hash_id>
    docker start 容器

13. Erro de reinicialização do Docker - o comando de reinicialização está travado.
systemctl restart docker está travado.

  • Desconhecido - Motivo: pode haver muitos contêineres iniciados ou problemas de E/S de disco
  • Solução:
    systemctl start docker-cleanup.service
    systemctl start docker

2. Relatório de erros sobre problemas de permissão

14、Permissão negada ao tentar conectar-se ao soquete daemon do Docker em unix:///var/run/docker.sock

  • Solução:
    verifique o grupo de usuários onde /var/run/docker.sock está localizado
    e junte novamente o usuário ao grupo docker, usermod -aG docker ${USER}

15、soquete chown na etapa GRUPO: Esse processo não existe

  • Motivo: o Docker não consegue encontrar as informações do grupo do grupo. O grupo do Docker pode ter sido excluído acidentalmente.
  • Solução:
    groupadd docker

16、Poste http:///var/run/docker.sock/v1.XXX /auth: disque unix /var/run/docker.sock: permissão negada. Você está tentando se conectar a um daemon habilitado para TLS sem TLS?

  • Motivo: quando um usuário não Root gerencia o Docker, as permissões são insuficientes.
  • Solução:
    groupadd docker
    usermod -a -G docker user

17. Quando o docker confirma a imagem, ocorre um erro
: Erro ao processar o arquivo tar (status de saída 1): EOF inesperado

  • Motivo: pode ser causado por problemas de permissão
  • Solução:
    chmod +x 加一个执行权限

3. Relatório de erros sobre problemas de espelhamento e armazenamento

18、Obtenha https://registry-1.docker.io/v2/: disque tcp: procure registro-1.docker.io

  • Motivo: o repositório Docker não pode ser acessado
  • Solução:
    Modifique a origem do armazém do Docker para uma origem de armazém doméstica ou autoconstruída
    . Modifique /etc/docker/daemon.json

19. Erro ao enviar imagem local
O push refere-se a um repositório [XXXX] Obtenha https://xxx/v1/_ping: http: o servidor deu resposta HTTP ao cliente HTTPS

  • Motivo: o registro do Docker não usa serviço https
  • Solução:
    Escreva o arquivo /etc/docker/daemon.json:
    { “insecure-registries”:[“”] }

20、/usr/bin/docker-current: Resposta de erro do daemon: erro de tempo de execução oci: container_linux.go: iniciar processo de contêiner causou “exec: “/bin/bash”: arquivo executável não encontrado em $PATH”.

  • Motivo: a própria imagem do Docker tem problemas ou a versão do mecanismo Docker é relativamente baixa.
  • Solução:
    você pode atualizar o serviço de versão Docker

21. Ao construir uma imagem, a execução de chown -R é muito lenta.

  • Motivo: o Docker usa uma estratégia de cópia na gravação, portanto, quando o comando chown for executado, todos os arquivos de imagem da camada superior serão copiados para a camada atual e, em seguida, as permissões serão modificadas e então gravadas no sistema de arquivos.
  • Solução:
    você não deve usar comandos como chown -R que modificam arquivos em lotes grandes.

22. A compilação do Docker relata um erro ao construir a imagem:
Mensagem do kernel syslogd:unregister_netdevice: aguardando que lo fique livre. Contagem de uso = 1

  • Motivo: a versão do mecanismo docker é muito alta
  • Solução:
    a versão do mecanismo docker precisa corresponder à versão do kernel da imagem interna do docker

23、docker: Resposta de erro do daemon: containerd: o contêiner não foi iniciado antes do tempo limite especificado.ERRO[0133] erro ao obter eventos do daemon: contexto cancelado

  • Motivo: após modificar o diretório raiz do docker e reiniciar, ocorre um erro ao baixar a imagem.
  • Solução:
    reinicie o serviço docker
    ou reinicie o servidor

4. Relatório de erros sobre problemas de recursos

25、Docker não sobra espaço no dispositivo

  • Razão: Não há espaço suficiente
  • Solução: Limpe espaço, exclua contêineres, imagens e outros recursos não utilizados
    docker system prune -a

26. /var/lib/docker/containers ocupa muito espaço

  • Motivo: o arquivo de log ocupa muito espaço
  • Solução:
    cat /dev/null > *-json.log
    Ou
    adicione parâmetros de inicialização do dockerd, /etc/docker/daemon.json
    {"log-driver":"json-file",
    "log-opts": {"max-size":"2G", "max-file ":"10"}

27、Áreas máximas de memória virtual vm.max_map_count [65530] é muito baixo, aumente para pelo menos [262144]

  • Motivo: A configuração padrão dos parâmetros do sistema é muito pequena
  • Solução:
    Modifique vm.max_map_count em /etc/sysctl.conf e aumente-o

28、O início do processo do contêiner causou “process_linux.go:301:
a execução do processo exec setns para init causou “status de saída 40””: desconhecido.
de tempos em tempos

  • Razão: Pode ser causado por problema de cache
  • Solução:
    echo 1 > /proc/sys/vm/drop_caches

29. O Docker inicia vários contêineres localmente, causando falhas subsequentes na inicialização do contêiner.

  • Motivo: Verifique se o espaço no disco rígido está cheio, se não for causado por problema de espaço no disco rígido
  • Solução:
    vim /etc/sysctl.conf
    adicione o parâmetro fs.aio-max-nr = 1048576
    sysctl -p

30. O Docker inicia de forma anormal e o status é reiniciando repetidamente
o nome do contêiner de logs do Docker, verifique o log de exceção,
verifique /var/log/messages

  • Motivo: A memória está cheia, causando OOM
  • Solução:
    libere a memória e inicie o contêiner

5. Relatório de erro de incompatibilidade de versão

31、overlayfs: Não é possível excluir o arquivo movido da camada base para o diretório recém-criado, mesmo no ext4

  • Motivo: Causado por problemas de compatibilidade entre o XFS e o Overlay, sistema de arquivos fornecido pelo Centos.
  • Solução:
    Este problema foi corrigido no kernel 4.4.6 ou superior

32、docker: Resposta de erro do daemon: falha na criação do tempo de execução do OCI: container_linux.go:344: iniciar o processo do contêiner causou “process_linux.go:297: obter o pid do filho final do tubo causou “leitura init-p: conexão redefinida pelo par” ": desconhecido.

  • Motivo: a versão do Docker e a versão do sistema operacional não correspondem
  • Solução:
    reinstale a versão do Docker suportada pelo kernel do sistema operacional

6. Relatório de erros para problemas de rede ou porta

33、AVISO: o encaminhamento IPv4 está desabilitado. A rede não funcionará.

  • Motivo: A rede ipv4 não pode ser encaminhada
    . Solução:
    vim /usr/lib/sysctl.d/00-system.conf
    Adicione net.ipv4.ip_forward=1 à última linha
    para reiniciar o serviço de rede. Exclua o contêiner errado e crie um novo novamente

34、Criando rede “xxxxxxx” com o driver padrão

  • Motivo: conflito de gateway do Docker.
    Depois de iniciar o contêiner e docker-compose iniciar o contêiner, a rede é desconectada.
  • Solução:
    Configure o parâmetro network_mode para o contêiner iniciado em docker-compose.yml: "bridge"

35、Não foi possível encontrar um nó que satisfaça as seguintes condições [porta xxxx]

  • Motivo: quando o contêiner usa mapeamento de porta (docker run -p xxxx:xxxx ou ports no compose template
    ), o sistema criará uma porta no host e acessará a porta especificada do contêiner por meio de NAT. Se a porta no host estiver ocupada por um contêiner ou processo do sistema, a alocação de porta falhará.
  • Solução:
    limpe o contêiner ou processo que ocupa a porta ou ajuste a porta do host do mapeamento da porta do contêiner para evitar conflitos.

36、Resposta de erro do daemon: terminal de serviço com nome xxx já

  • Motivo: O porto já está ocupado
  • Solução:
    reinicie o contêiner docker

37、docker: Resposta de erro do daemon: driver falhou ao programar conectividade externa no endpoint XXXXX: Bind para 0.0.0.0:80 falhou: a porta já está alocada

  • Motivo: conflito na porta do contêiner
  • Solução:
    altere a porta vinculada ao host

7. Erro de instalação do Docker

38. Ao instalar o docker, ele reporta Requires: container-selinux >= 2.9

  • Motivo: A versão do container-selinux é baixa ou não está instalada.
  • Solução:
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    yum install epel-release
    yum makecache
    yum install container-selinux

39. Ao instalar o docker-compose, ocorre um erro
"ImportError: o objeto 'module' não possui o atributo 'check_specifier'"

  • Motivo: problema de versão do setuptools
  • Solução:
    atualize o setuptools para a versão 30.1.0 ou superior
    pip install --upgrade setuptools

40. O docker-compose está descontinuado
DEPRECATION: Python 2.7 chegará ao fim de sua vida útil em 1º de janeiro de 2020. Atualize seu Python, pois o Python 2.7 não será mantido após essa data. Uma versão futura do pip abandonará o suporte para Python 2.7.

  • Motivo: python2.7 solicita atualização
  • Solução:
    pip install -i https://pypi.douban.com/simple docker-compose

8. Erro de exclusão do Docker

41、docker删除容器报错
Resposta de erro do daemon:A sobreposição do driver falhou ao remover o sistema de arquivos raiz xxxxx: remove/var/lib/docker/overlay2/xxxxx/merged: dispositivo ou recurso ocupado

  • Motivo: o contêiner monta o volume de dados e não pode ser excluído diretamente.
  • Solução:
    grep docker /proc/*/mountinfo | grep xxxxx
    elimine o processo e
    exclua o contêiner novamente

42.
Resposta de erro do daemon: Driver aufs falhou ao remover o sistema de arquivos raiz XXXXXXXXXXXXXXXX: aufs: erro de desmontagem após novas tentativas: /var/lib/docker/aufs/mnt/xxxxxxxx: dispositivo ou recurso ocupado

  • Motivo: o contêiner de estado morto não pode ser excluído e ainda está ocupando recursos.
  • Solução:
    docker rm -fv 容器idEle será excluído automaticamente após alguns minutos.

43、docker删除镜像报错
Resposta de erro do daemon: conflito: não foi possível remover a referência do repositório “XXXX” (deve forçar) - o contêiner XXXX está usando sua imagem referenciada YYYY

  • Motivo: a imagem está sendo usada por um contêiner
  • Solução:
    você precisa excluir o contêiner de ID relevante antes de excluir a imagem.

44、docker删除镜像报错
Resposta de erro do daemon: conflito: não é possível excluir XXXXXXXXXX (deve ser forçado) - a imagem é referenciada em vários repositórios

  • Motivo: o login da imagem foi enviado para outros repositórios remotos
  • Solução:
    se esta imagem não for necessária, docker rmi -f exclua-a à força

45. Docker relata um erro ao excluir uma imagem.
Resposta de erro do daemon: conflito: não é possível excluir XXX (não pode ser forçado) - a imagem possui imagens filhas dependentes

  • Razão: Existe um espelho filho que depende do espelho pai
  • Solução:
    exclua a imagem à força ou exclua os contêineres em lotes e, em seguida, exclua a imagem

9. Outros relatórios de erros

46、docker: Resposta de erro do daemon: driver falhou ao programar conectividade externa no ponto final XXXXXXX: (iptables falhou: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.2 - -dport 8080 -j ACEITAR: iptables: Nenhuma cadeia/destino/correspondência com esse nome.

  • Razão: Causado por problema de firewall
  • Solução:
    desligue o firewall e reinicie o docker

47. Ao executar docker info, o seguinte aviso aparece
: AVISO: bridge-nf-call-iptables está desabilitado
AVISO: bridge-nf-call-ip6tables está desabilitado

  • Motivo: causado por problemas de configuração, bridge-nf-call-iptables precisa ser habilitado
  • Solução:
    vi /etc/sysctl.conf
    adicione o seguinte
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    net.bridge.bridge-nf-call-arptables = 1

48. Erros relacionados ao banco de dados docker.
O uso do Docker para criar um contêiner mysql trava.
O banco de dados não foi inicializado e a opção de senha não foi especificada.

  • Solução:
    docker run -d -e MYSQL_ROOT_PASSWORD=[密码] -p 3306:3306 mysql镜像

Recomendações de especificação de uso do Docker

  • Tente usar a nova versão estável do docker nos últimos 1-2 anos
  • Não instale versões muito antigas anteriores a este ano. Um grande número de bugs foram resolvidos por novas atualizações de versão.
  • Tente não criar imagens muito grandes, como 5G10G ou superior
  • A imagem deve ser o mais leve possível e remover software, dados desnecessários, etc.
  • Monte a configuração do host no contêiner e use somente leitura
  • O contêiner requer -v arquivo de configuração do host, tente usar ro somente leitura
  • Os dados devem ser montados no disco rígido físico ou no nó de armazenamento do host.
  • Não execute diretamente no contêiner para evitar perda de dados causada pelo tempo de inatividade do contêiner.
  • Os logs do aplicativo devem ser suspensos na máquina host
  • Não imprima diretamente no contêiner. Evite visualizar logs apenas no modo docker logs. Evite ir ao diretório vulume para visualizar logs.
  • Não use apenas a tag mais recente
  • As tags precisam ter um padrão de gerenciamento, e você pode encontrar a versão correspondente com base na tag.
  • Não use o IP do contêiner e não o codifique na configuração (padrão 172.17.0.x)
  • Depois que o contêiner for reiniciado, é provável que o endereço IP mude.
  • Tente não executar vários processos em um único contêiner
  • Contêineres não são máquinas virtuais. Tente ter um contêiner e um processo.
  • Mantenha as imagens consistentes em todos os ambientes
  • Seja em ambiente de teste, UAT ou produção, tente manter a mesma imagem e não a altere. Ao alterar o ambiente, você só precisa alterar os parâmetros da variável de ambiente para distingui-lo.
  • Certifique-se de monitorar os contêineres do Docker mesmo se forem encontrados problemas
  • Recomenda-se usar o prometheus para monitorar o contêiner
  • Certifique-se de limitar os recursos do contêiner docker, especialmente CPU, memória, espaço no disco rígido e até mesmo rede, para evitar invadir os recursos de hardware do host.

Declaração de direitos autorais: Este artigo é um artigo original do blogueiro CSDN "Ice-winters" e segue o contrato de direitos autorais CC 4.0 BY-SA. Anexe o link da fonte original e esta declaração ao reimprimir.
Link original: https://blog.csdn.net/qq_41958579/article/details/107927140
O formato do texto original não é fácil de ler, por isso o layout foi ajustado.

おすすめ

転載: blog.csdn.net/qq_45277554/article/details/133300618