Como adicionar usuários a um container Docker sem prompts interativos?

Publicado 8 de setembro de 2024

Problema: Adicionando Usuários a Contêineres Docker de Forma Não Interativa

Adicionar usuários a contêineres Docker geralmente requer prompts interativos. Isso pode ser inconveniente para processos automatizados ou implantações via script. Isso cria um desafio ao tentar melhorar o gerenciamento de contêineres e o provisionamento de usuários sem entrada manual.

A Solução: Criação de Usuários Não Interativa

Usando useradd para Adição Automatizada de Usuários

O comando useradd é uma opção não interativa para adduser para criar usuários em contêineres Docker. Este comando permite adicionar usuários sem entrada manual durante o processo de construção.

A sintaxe básica para useradd é:

useradd [opções] nome_do_usuário

Opções comuns incluem:

  • -m: Cria o diretório home do usuário
  • -s: Especifica o shell de login do usuário
  • -u: Define um ID de usuário específico
  • -g: Atribui o usuário a um grupo primário

Dica: Criação Segura de Usuários

Ao criar usuários com useradd, considere usar a opção -p para definir uma senha criptografada. Isso melhora a segurança evitando o uso de senhas padrão ou vazias. Por exemplo:

useradd -m -s /bin/bash -p $(openssl passwd -1 "senha_segura") nome_do_usuário

Implementando a Solução no Dockerfile

Para adicionar usuários de forma não interativa em seu Dockerfile, você pode usar o comando useradd com opções. Aqui está um exemplo de como adicionar usuários em seu Dockerfile:

RUN useradd -ms /bin/bash uwsgi
RUN useradd -ms /bin/bash celery

Isso cria dois usuários, 'uwsgi' e 'celery', cada um com seu próprio diretório home e bash como seu shell padrão.

Para criar um grupo compartilhado para esses usuários, você pode usar o comando groupadd:

RUN groupadd worker
RUN usermod -aG worker uwsgi
RUN usermod -aG worker celery

Esses comandos criam um grupo 'worker' e adicionam ambos os usuários 'uwsgi' e 'celery' a ele.