How to add users to Docker container?

后端 未结 8 1189
无人及你
无人及你 2020-11-28 17:07

I have a docker container with some processes (uwsgi and celery) running inside. I want to create a celery user and a uwsgi user for these processes as well as a worker grou

相关标签:
8条回答
  • 2020-11-28 17:43

    Everyone has their personal favorite, and this is mine:

    RUN useradd --user-group --system --create-home --no-log-init app
    USER app
    

    Reference: man useradd

    The RUN line will add the user and group app:

    root@ef3e54b60048:/# id app
    uid=999(app) gid=999(app) groups=999(app)
    

    Use a more specific name than app if the image is to be reused as a base image. As an aside, include --shell /bin/bash if you really need.


    Partial credit: answer by Ryan M

    0 讨论(0)
  • 2020-11-28 17:44

    Adding user in docker and running your app under that user is very good practice for security point of view. To do that I would recommend below steps:

    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"]
    

    Above steps is a full example of the copying NodeJS project files, creating a user group and user, assigning permissions to the user for the project folder, switching to the newly created user and running the app under that user.

    0 讨论(0)
  • 2020-11-28 17:53

    Ubuntu

    Try the following lines in Dockerfile:

    RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu
    USER ubuntu
    WORKDIR /home/ubuntu
    

    useradd options (see: man useradd):

    • -r, --system Create a system account. see: Implications creating system accounts
    • -m, --create-home Create the user's home directory.
    • -d, --home-dir HOME_DIR Home directory of the new account.
    • -s, --shell SHELL Login shell of the new account.
    • -g, --gid GROUP Name or ID of the primary group.
    • -G, --groups GROUPS List of supplementary groups.
    • -u, --uid UID Specify user ID. see: Understanding how uid and gid work in Docker containers
    • -p, --password PASSWORD Encrypted password of the new account (e.g. ubuntu).

    Setting default user's password

    To set the user password, add -p "$(openssl passwd -1 ubuntu)" to useradd command.

    Alternatively add the following lines to your Dockerfile:

    SHELL ["/bin/bash", "-o", "pipefail", "-c"]
    RUN echo 'ubuntu:ubuntu' | chpasswd
    

    The first shell instruction is to make sure that -o pipefail option is enabled before RUN with a pipe in it. Read more: Hadolint: Linting your Dockerfile.

    0 讨论(0)
  • 2020-11-28 17:56

    Add this line to your Dockerfile (You can run any linux command this way)

    RUN useradd -ms /bin/bash yourNewUserName
    
    0 讨论(0)
  • 2020-11-28 17:57

    To avoid the interactive questions by adduser, you can call it with these parameters:

    RUN adduser --disabled-password --gecos '' newuser
    

    The --gecos parameter is used to set the additional information. In this case it is just empty.

    On systems with busybox (like Alpine), use

    RUN adduser -D -g '' newuser
    

    See busybox adduser

    0 讨论(0)
  • 2020-11-28 17:57

    Alternatively you can do like this.

    RUN addgroup demo && adduser -DH -G demo demo
    

    First command creates group called demo. Second command creates demo user and adds him to previously created demo group.

    Flags stands for:

    -G Group
    -D Don't assign password
    -H Don't create home directory
    
    0 讨论(0)
提交回复
热议问题