如何在码头集装箱内使用sudo?

通常,docker容器是使用root用户运行的。 我想使用不同的用户,使用docker的USER指令是没有问题的。 但是这个用户应该能够在容器中使用sudo 。 该命令丢失。

这里有一个简单的Dockerfile用于这个目的:

FROM ubuntu:12.04

RUN useradd docker && echo "docker:docker" | chpasswd
RUN mkdir -p /home/docker && chown -R docker:docker /home/docker

USER docker
CMD /bin/bash

运行这个容器,我用用户'docker'登录。 当我尝试使用sudo时,找不到该命令。 所以我试图在我的Dockerfile中使用安装sudo软件包

RUN apt-get install sudo

这导致无法找到软件包sudo


刚刚得到它。 正如regan指出的那样,我必须将用户添加到sudoers组中。 但主要原因是我忘记更新存储库缓存,所以apt-get找不到sudo包。 现在正在工作。 以下是完成的代码:

FROM ubuntu:12.04

RUN apt-get update && 
      apt-get -y install sudo

RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

USER docker
CMD /bin/bash

其他答案不适合我。 我一直在搜索,发现了一篇博客文章,讲述了一个团队如何在码头集装箱内运行非root用户。

这是TL; DR版本:

RUN apt-get update
RUN apt-get install sudo

RUN adduser --disabled-password --gecos '' docker
RUN adduser docker sudo
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

USER docker

# this is where I was running into problems with the other approaches
RUN sudo apt-get update 

我为此使用了FROM node:9.3 ,但我怀疑其他类似的容器基地也会起作用。


当容器中既没有sudo也没有apt-get时,您也可以使用命令以root用户身份跳转到正在运行的容器

docker exec -u root -t -i container_id /bin/bash
链接地址: http://www.djcxy.com/p/18231.html

上一篇: How to use sudo inside a docker container?

下一篇: How do I assign a port mapping to an existing Docker container?