Causas e soluções para várias falhas comuns do Docker
- 1. Falha de inicialização
- 2. Relatório de erros sobre problemas de permissão
- 3. Relatório de erros sobre problemas de espelhamento e armazenamento
- 4. Relatório de erros sobre problemas de recursos
- 5. Relatório de erro de incompatibilidade de versão
- 6. Relatório de erros para problemas de rede ou porta
- 7. Erro de instalação do Docker
- 8. Erro de exclusão do Docker
- 9. Outros relatórios de erros
- Recomendações de especificação de uso do Docker
Docker é um contêiner relativamente simples de usar. Podemos obter informações das seguintes maneiras:
- Execute o comando através do docker run, podendo retornar informações
- Obtenha logs por meio de docker logs e execute filtragem direcionada
- Verifique o status do serviço docker por meio do docker de status systemctl
- 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 容器id
Ele 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.