将用户添加到Docker容器
我有一个docker容器,里面运行着一些进程(uwsgi和芹菜)。 我想为这些进程创build一个芹菜用户和一个uwsgi用户,以及它们都属于的工作组,以分配权限。
我尝试将RUN adduser uwsgi
和RUN adduser celery
到我的Dockerfile中,但是这会导致问题,因为这些命令提示input(我已经发布了下面的内部版本的响应)。
将用户添加到Docker容器以便为在容器中运行的工作人员设置权限的最佳方式是什么?
我的Docker镜像是从官方的Ubuntu14.04基础上构build的。
以下是运行adduser命令时Dockerfile的输出:
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]
诀窍是使用useradd
而不是它的交互包装adduser
。 我通常创build用户:
RUN useradd -ms /bin/bash newuser
它为用户创build一个主目录,并确保bash是默认的shell。
你可以添加:
USER newuser WORKDIR /home/newuser
到你的dockerfile。 之后的每个命令以及交互式会话将以用户newuser
身份执行:
docker run -t -i image newuser@131b7ad86360:~$
在调用用户命令之前,您可能必须为新用户授予执行您要运行的程序的权限。
在容器内部使用非特权用户是出于安全原因的一个好主意。 它也有一些缺点。 最重要的是,从图像中获取图像的人必须切换回根,才能以超级用户权限执行命令。
为了避免adduser的互动问题,你可以用下面的参数来调用它:
RUN adduser --disabled-password --gecos '' newuser
--gecos
参数用于设置附加信息。 在这种情况下,它只是空的。
RUN useradd -ms /bin/bash yourNewUserName
这是又一个例子(如果你有一些networking目录活跃)
(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'
并创build一些有用的用户组
useradd -g cdrom,floppy,audio,dip,video,plugdev,netdev,lpadmin,scanner,bluetooth,docker --create-home --shell $SHELL gitlabuser