添加用户到码头工人集装箱添加用户到码头工人集装箱(Add User to Docker Contai

2019-05-12 18:24发布

我有内部运行的一些程序(uwsgi和芹菜)码头工人的容器。 我想创建一个用户芹菜和这些工艺以及工人组,他们将同属一个uwsgi用户,以分配权限。

我尝试添加RUN adduser uwsgiRUN adduser celery我Dockerfile,而这是造成问题,因为这些命令提示输入(我已经张贴从下面生成的响应)。

什么是将用户添加到一个码头工人的容器,以便设置在容器中运行人员权限的最佳方法是什么?

我多克尔图像从官方的Ubuntu14.04基地建。

下面是从Dockerfile输出时的adduser命令运行:

Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ... 
Adding new user `uwsgi' (1000) with group `uwsgi' ... 
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ... 
[91mEnter new UNIX password: Retype new UNIX password: [0m 
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m 
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m 
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m 
Try again? [y/N] 
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
    Full Name []: 
Room Number []:     Work Phone []:  Home Phone []:  Other []: 
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m 
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m 
Is the information correct? [Y/n] 
---> 258f2f2f13df 
Removing intermediate container 59948863162a 
Step 5 : RUN adduser celery 
---> Running in be06f1e20f64 
Adding user `celery' ...
Adding new group `celery' (1001) ... 
Adding new user `celery' (1001) with group `celery' ... 
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ... 
[91mEnter new UNIX password: Retype new UNIX password: [0m 
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m 
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m 
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m 
Try again? [y/N] 
Changing the user information for celery
Enter the new value, or press ENTER for the default
    Full Name []:   Room Number []:     Work Phone []: 
Home Phone []:  Other []: 
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m 
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m 
Is the information correct? [Y/n] 

Answer 1:

诀窍是使用useradd ,而不是它的交互式包装的adduser 。 我通常创建用户:

RUN useradd -ms /bin/bash newuser

这为用户创建一个主目录,并确保Bash是默认的shell。

然后,您可以添加:

USER newuser
WORKDIR /home/newuser

您dockerfile。 每一个命令之后以及互动环节将作为用户执行newuser

docker run -t -i image
newuser@131b7ad86360:~$

你可能不得不放弃newuser执行你打算调用用户命令之前运行程序的权限。

使用非特权用户的容器内是出于安全原因,一个好主意。 它也有一些缺点。 最重要的是,人们从图像中获得的图像将要切换回根才可以拥有超级用户权限执行命令。



Answer 2:

为了避免adduser的交互式问题,您可以用这些参数调用它:

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

所述--gecos参数用于设置附加信息。 在这种情况下,它仅仅是空的。

在与busybox的(如阿尔卑斯山),利用系统

RUN adduser -D -g '' newuser

见的busybox的adduser



Answer 3:

Ubuntu的

尝试在以下行Dockerfile

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

useradd选项(参见: man useradd ):

  • -r--system创建一个系统帐户。 参见: 启示创建系统帐户
  • -m--create-home创建用户的主目录。
  • -d--home-dir HOME_DIR新帐户的主目录。
  • -s--shell SHELL新帐户的登录shell。
  • -g--gid GROUP名称或主要组的ID。
  • -G--groups GROUPS补充组的列表。
  • -u--uid UID指定的用户ID。 请参阅: 了解如何UID和GID工作Docker容器
  • -p--password PASSWORD新帐户的加密密码(如ubuntu )。

    要设置密码,添加: -p "$(openssl passwd -1 ubuntu)"上面的命令。



Answer 4:

在泊坞窗添加用户和用户下运行你的应用是安全的角度来看非常好的做法。 要做到这一点,我会建议如下步骤:

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

上面的步骤是复制项目的NodeJS文件的完整的例子,创建用户组和用户,分配权限给用户的项目文件夹,切换到新创建的用户和运行用户下的应用程序。



Answer 5:

该行添加到您的Dockerfile(可以运行任何Linux命令这样)

RUN useradd -ms /bin/bash yourNewUserName


Answer 6:

这是另一个例子(如果你有一些网络目录有效)

(sudo groups || groups) | grep docker || echo 'Could not find docker group, consider: groupadd docker; gpasswd -a ${USER} docker; service docker.io restart; service docker restart; newgrp docker; nscd -i group'

而只是创造一些有用的团体用户

useradd -g cdrom,floppy,audio,dip,video,plugdev,netdev,lpadmin,scanner,bluetooth,docker --create-home --shell $SHELL gitlabuser


文章来源: Add User to Docker Container