Eu tento usar o Docker para executar dois contêineres (o problema não é específico para eles):
- MySQL (contêiner oficial)
- Redmine (contêiner oficial)
Cada contêiner tem uma porta encaminhada:
- MySQL:
127.0.0.1:3000 -> 3000/tcp
- Redmine:
127.0.0.1:3306 -> 3306/tcp
Como você pode ver, o objetivo é torná-los acessíveis somente dentro do host .
Um servidor Nginx (não instalado via Docker) ouve a porta 80 e redireciona qualquer solicitação para a porta do contêiner Redmine (usando funcionalidades de proxy: proxy_pass
etc.).
Tudo funciona perfeitamente neste momento, quando eu vou ao ip do servidor, posso acessar o Redmine.
Mas, eu gostaria de adicionar alguma segurança usando o iptables.
Então, o objetivo é:
- DROP all por padrão (este ponto é ok)
- Permitir que o Docker faça seus negócios somente dentro do host local
- Permitir que os contêineres acessem a Internet (para baixar dependências, atualizações ...)
- Permitir o acesso a SSH e Nginx (ok também)
Primeiro, tentei adicionar a opção --iptables=false
para impedir que o docker mexesse em meus iptables.
Depois de uma reinicialização, pensei que, com o iptables limpo (todas as políticas estão definidas como ACCEPT
por padrão, então nada é feito ainda), tudo funcionaria bem. Mas esse não é o caso, eu recebo uma resposta "502 Bad Gateway"
do Nginx. Eu realmente não entendo porque o Docker é incapaz de trabalhar sem adicionar regras adicionais (se tudo estiver aberto, deve funcionar ... Não?).
Eu tentei ler os documentos sobre redes avançadas no Docker, eu também tentei vários tutoriais, mas não consigo encontrar o que está bloqueando o Docker:
Eu não sou um especialista em Linux / Docker / SysAdmin, então talvez seja óbvio para alguns de vocês (pelo menos, eu desejo!).
Não hesite em me perguntar mais detalhes, se necessário.
Agradecemos antecipadamente pela sua resposta.