Executar um comando como um usuário diferente
Neste passo, você aprenderá como executar um comando dentro de um container em execução como um usuário específico. Por padrão, docker exec executa comandos como o usuário root dentro do container, mas você pode especificar um usuário diferente usando a flag -u ou --user. Isso é importante para segurança e para aderir ao princípio do menor privilégio (least privilege).
Vamos continuar usando o container my-nginx. Primeiro, vamos ver como o comando ls / é executado por padrão.
docker exec my-nginx whoami
A saída provavelmente será root, pois este é o usuário padrão para docker exec.
Agora, vamos tentar executar um comando como um usuário diferente. A imagem Nginx normalmente executa o processo Nginx como um usuário não-root, frequentemente chamado nginx. Vamos tentar executar o comando whoami como o usuário nginx.
docker exec -u nginx my-nginx whoami
Você deve ver a saída nginx, confirmando que o comando foi executado como o usuário nginx.
Você também pode especificar um ID de usuário (UID) em vez de um nome de usuário. Para encontrar o UID do usuário nginx dentro do container, podemos olhar para o arquivo /etc/passwd.
docker exec my-nginx cat /etc/passwd | grep nginx
A saída mostrará a entrada para o usuário nginx, incluindo seu UID e GID (Group ID). Por exemplo, pode ter a seguinte aparência: nginx:x:101:101:nginx user,,,:/nonexistent:/bin/false. Neste exemplo, o UID é 101.
Agora, vamos executar o comando whoami usando o UID. Substitua 101 pelo UID real que você encontrou no passo anterior, se for diferente.
docker exec -u 101 my-nginx whoami
A saída deve ser novamente nginx, demonstrando que você pode usar o nome de usuário ou o UID para especificar o usuário para docker exec.
Executar comandos como um usuário não-root é uma boa prática de segurança, especialmente ao interagir com arquivos sensíveis ou ao realizar operações que não exigem privilégios de root.