Pergunta antiga, mas não vejo muitas respostas boas, então adicione essa atualização na esperança de que isso ajude os outros:
Você pode usar as opções docker run -t e docker exec-it para alocar pty em sua sessão de execução do docker. Há uma boa pergunta e resposta sobre isso aqui: link
Isso é mais simples: e você não precisa alterar a maneira como cria ou executa o contêiner. Com o docker exec você pode simplesmente usar a opção -u para fazer login no container como usuários diferentes e evitar o uso do su. por exemplo.
$ docker exec -u root -it small_hypatia bash
$ docker exec -u someone-else -it small_hypatia bash
Veja também uma resposta mais geral sobre como resolver "su: deve ser executado a partir de um terminal" aqui. Em particular, é útil saber como 'ssh -t' e 'ssh -tt' podem ser usados. O python pty allocate hack bonito também pode ser usado para obter su trabalhando para alguém com o mesmo problema. link