作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个 docker 容器,里面运行着一些进程(uwsgi 和 celery)。我想为这些进程创建一个 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]
最佳答案
诀窍是使用 useradd
而不是它的交互式包装器 adduser
。我通常使用以下方式创建用户:
RUN useradd -ms /bin/bash newuser
它为用户创建一个主目录并确保 bash 是默认 shell。
然后你可以添加:
USER newuser
WORKDIR /home/newuser
到你的 dockerfile。之后的每个命令以及交互式 session 都将以用户 newuser
的身份执行:
docker run -t -i image
newuser@131b7ad86360:~$
在调用用户命令之前,您可能必须授予 newuser
执行您打算运行的程序的权限。
出于安全原因,在容器内使用非特权用户是一个好主意。它也有一些缺点。最重要的是,从您的图像派生图像的人必须切换回 root 才能以 super 用户权限执行命令。
关于linux - 如何将用户添加到 Docker 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701930/
我是一名优秀的程序员,十分优秀!