Il trucco è usare useradd invece del suo wrapper interattivo adduser .Di solito creo utenti con:
RUN useradd -ms /bin/bash newuser
che crea una home directory per l'utente e assicura che bash sia la shell predefinita.
Puoi quindi aggiungere:
USER newuser
WORKDIR /home/newuser
 al tuo dockerfile. Ogni comando successivo così come le sessioni interattive verranno eseguite come utente newuser :
docker run -t -i image
[email protected]:~$
 Potrebbe essere necessario fornire newuser i permessi per eseguire i programmi che intendi eseguire prima di invocare il comando utente.
L'utilizzo di utenti senza privilegi all'interno dei contenitori è una buona idea per motivi di sicurezza. Ha anche alcuni inconvenienti. Ancora più importante, le persone che traggono immagini dalla tua immagine dovranno tornare a root prima di poter eseguire comandi con privilegi di superutente.
L'aggiunta di un utente nella finestra mobile e l'esecuzione dell'app con quell'utente è un'ottima pratica dal punto di vista della sicurezza. Per fare ciò, consiglierei i seguenti passaggi:
FROM node:10-alpine
# Copy source to container
RUN mkdir -p /usr/app/src
# Copy source code
COPY src /usr/app/src
COPY package.json /usr/app
COPY package-lock.json /usr/app
WORKDIR /usr/app
# Running npm install for production purpose will not run dev dependencies.
RUN npm install -only=production    
# Create a user group 'xyzgroup'
RUN addgroup -S xyzgroup
# Create a user 'appuser' under 'xyzgroup'
RUN adduser -S -D -h /usr/app/src appuser xyzgroup
# Chown all the files to the app user.
RUN chown -R appuser:xyzgroup /usr/app
# Switch to 'appuser'
USER appuser
# Open the mapped port
EXPOSE 3000
# Start the process
CMD ["npm", "start"]
I passaggi precedenti sono un esempio completo della copia dei file di progetto NodeJS, della creazione di un gruppo di utenti e di un utente, dell'assegnazione delle autorizzazioni all'utente per la cartella del progetto, del passaggio all'utente appena creato e dell'esecuzione dell'app con quell'utente.
Ubuntu
 Prova le seguenti righe in Dockerfile :
RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu
USER ubuntu
WORKDIR /home/ubuntu
 useradd opzioni (vedi:man useradd ):
- -r,- --systemCrea un account di sistema.
- -m,- --create-homeCrea la home directory dell'utente.
- -d,- --home-dir HOME_DIRHome directory del nuovo account.
- -s,- --shell SHELLShell di login del nuovo account.
- -g,- --gid GROUPNome o ID del gruppo principale.
- -G,- --groups GROUPSElenco dei gruppi supplementari.
- -u,- --uid UIDSpecifica l'ID utente.
- -p,- --password PASSWORDPassword crittografata del nuovo account (ad es.- ubuntu).
Impostazione della password utente predefinita
 Per impostare la password utente, aggiungi -p "$(openssl passwd -1 ubuntu)" a useradd comando.
 In alternativa, aggiungi le seguenti righe al tuo Dockerfile :
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN echo 'ubuntu:ubuntu' | chpasswd
 La prima istruzione della shell è assicurarsi che -o pipefail l'opzione è abilitata prima di RUN con dentro una pipa. Leggi di più:Hadolint:Linting del tuo Dockerfile.
Per evitare le domande interattive di adduser, puoi chiamarlo con questi parametri:
RUN adduser --disabled-password --gecos '' newuser
 Il --gecos parametro viene utilizzato per impostare le informazioni aggiuntive. In questo caso è solo vuoto.
Sui sistemi con busybox (come Alpine), usa
RUN adduser -D -g '' newuser
Vedi busybox adduser