Tenho um container criado ( docker create
) a partir de uma imagem que estava usando EXPOSE 22
noDockerfile
Eu inicio via docker start <container name or ID>
e acesso via ssh
.
Agora preciso expor mais uma porta, de um serviço rodando neste container. Não consigo recriá-lo, ele precisa ter seus parâmetros de inicialização alterados para expor essa porta extra. Isso é possível?
Eu esperava que docker start
isso permitisse os mesmos parâmetros de docker create
ou , docker run
mas esse não é o caso.
Nota: sei que a filosofia do docker é criar containers efêmeros . É um fato da vida que eu tenho que lidar com este contêiner altamente customizado (em vez de recriá-lo)
Você está insinuando que não usou
docker-compose
para iniciá-lo, mas um arquivodocker run
. Eu examinaria odocker-compose
, porque então você poderia ter parado e iniciado novamente com um novo arquivo de configuração. Isso permite a criação reproduzível de um contêiner. Todos os exemplos de usodocker run
que você vê em todos os lugares não ajudam em nada.No seu caso particular, acho que tudo o que você precisa fazer é adicionar uma
iptables
regra. Por padrão,dockerd
manipula asiptables
regras para redirecionar o tráfego (pode até ser a única coisaEXPOSE
que faz). Se você fizeriptables -t nat -L -n
isso, provavelmente poderá ver como suas portas foram expostas. Você pode criar uma regra semelhante.Isso significa que, quando você reiniciar o servidor, a regra desaparecerá novamente. Você terá que salvar seu
iptables
estado. E isso também afeta a inconveniência dedockerd
manipulariptables
. É difícil gerenciar ao lado de outros serviços que tocam no iptables (como sistemas de configuração centralfail2ban
, ou até mesmo um simples salvamento automático de suas regras).você pode abrir a porta no comando create. para abrir a porta 80, por exemplo, um seria executado.
mais informações podem ser encontradas em https://docs.docker.com/engine/reference/commandline/create/