我有一个docker容器,里面运行着一些进程(uwsgi和celery) . 我想为这些进程创建一个芹菜用户和一个uwsgi用户,以及他们都属于的工作组,以便分配权限 .
我尝试将 RUN adduser uwsgi
和 RUN adduser celery
添加到我的Dockerfile中,但这会导致问题,因为这些命令会提示输入(我已经在下面的构建中发布了响应) .
将用户添加到Docker容器以便为容器中运行的工作程序设置权限的最佳方法是什么?
我的Docker镜像是从官方的Ubuntu14.04基础构建的 .
以下是运行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]
5 回答
诀窍是使用
useradd
而不是其交互式包装adduser
. 我通常创建用户:这为用户创建了一个主目录,并确保bash是默认shell .
然后你可以添加:
你的dockerfile . 之后的每个命令以及交互式会话都将以用户
newuser
执行:在调用用户命令之前,您可能必须授予
newuser
执行要运行的程序的权限 .出于安全原因,在容器内使用非特权用户是个好主意 . 它也有一些缺点 . 最重要的是,从图像中获取图像的人必须切换回root才能执行具有超级用户权限的命令 .
要避免adduser的交互式问题,您可以使用以下参数调用它:
--gecos
参数用于设置附加信息 . 在这种情况下它只是空的 .在使用busybox(如Alpine)的系统上,请使用
见busybox adduser
Ubuntu
请尝试
Dockerfile
中的以下行:useradd
options(见:man useradd
):-d
,--home-dir HOME_DIR
新帐户的主目录 .-m
,--create-home
创建用户的主目录 .-s
,--shell SHELL
新帐户的登录shell .-g
,--gid GROUP
主要组的名称或ID .-G
,--groups GROUPS
补充小组名单 .-p
,--password PASSWORD
新帐户的加密密码(例如ubuntu
) .将此行添加到Dockerfile(您可以通过这种方式运行任何linux命令)
这是另一个例子(如果您有一些网络目录处于活动状态)
并只使用一些有用的组创建用户