Recentemente aluguei um VPS como playground privado e para aprendizagem do docker. Eu quero hospedar alguns webservices por trás do nginx-proxy junto com docker-letsencrypt-nginx-proxy-companion .
Configurar
O servidor executa o Ubuntu 18.04.4 LTS, Docker versão 19.03.6 , build 369ce74a3c, docker-compose versão 1.17.1 , build desconhecido.
4GB vRAM, 4vCores (O hardware é executado no Intel Xeon)
O problema
Assim que quero executar mais de 8 contêineres, recebo erros estranhos. Existem alguns erros diferentes, e não posso dizer especificamente quando qual deles aparece:
OCI runtime create failed
por exemplo, ao tentar iniciar o joomla como compose-project com mysql:
ERROR: for joomla_joomladb_1 Cannot start service joomladb: OCI runtime create failed:
unable to retrieve OCI runtime error (open /run/containerd/io.containerd.runtime.v1.linux/moby/741c[...]6e3/log.json:
no such file or directory): fork/exec /usr/sbin/runc: resource temporarily unavailable: unknown
socket reset
ERROR: for joomla_joomladb_1 Cannot start service joomladb: read unix @->@/containerd-shim/24f42b8[...]32fa1.sock:
read: connection reset by peer: unknown
pthread_create failed: Resource temporarily unavailable
Não tenho nenhum registro correspondente no momento. Vou postá-los aqui se o erro ocorrer mais uma vez. Mas uma linha sempre parece serparent id not found
- garfo falhou. Quando este erro aparece, não posso fazer mais nada. Veja o próximo ponto:
Além disso e em relação a isso, às vezes recebo alguns erros estranhos no meu shell ao digitar qualquer comando. Quando o servidor está nesse estado, não posso su para fazer root ou reinicializar por linha de comando. Você pode me ver tentando digitar sudo
esta imagem: Erros com qualquer comando. Mesmo desligar ou reiniciar
O que eu tentei
- Eu vi este relatório no Github e alguns outros e se referem a um limite máximo de tarefas na máquina. Eu já configurei isso para um volume mais alto,
infinity
mas tudo isso não parece ajudar. (Eu mudei uma vez,/etc/systemd/system.conf
bem como porsystemctl edit docker.service
).
$ systemctl show --property=DefaultTasksMax
DefaultTasksMax=4659
$ systemctl status docker
...
Tasks: 52
...
Instalei exatamente o mesmo sistema no meu laptop (exceto o software de virtualização - o VPS roda em Virtuozzo, localmente usei Quemu com virt-manager) - e tudo funciona como esperado!
Os problemas aparecem com qualquer container que tento iniciar.
hello-world
, um outro projeto de composição ou um projeto já construído...Entrei em contato com meu provedor de hospedagem, também o referido problema acima e disse que eles não limitariam nenhum uso.
Agora encontrei o problema: o provedor de hospedagem limita o número de tarefas das máquinas virtuais. Essa técnica é chamada de contadores de bean do usuário .
Existe um arquivo onde você pode inspecionar esses limites que são definidos pelo Virtuozzo em
/proc/user_beancounters
Então, quando você sabe que seu VPS está hospedado no Virtuozzo, você pode
cat
usar este arquivo ou usar um dos scripts daqui para ler esses limites de recursos.O arquivo descreve principalmente 3 campos:
(copiado daqui )
Se o valor exibido em qualquer campo for insanamente alto, isso significa que esses recursos não são forçados a um limite.
A linha crucial no meu caso foi
numprocs
. Ele informa o número máximo de tarefas que a máquina pode executar. E como os processos em um contêiner docker também são executados no mesmo kernel que o VPS, todos contam.Então, a única solução aqui foi mudar para outro hoster, que não usa Virtuozzo (assim)!