首页 文章

如何在docker容器中使用sudo?

提问于
浏览
159

通常,使用用户 root 运行docker容器 . 我'd like to use a different user, which is no problem using 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

5 回答

  • 6

    刚刚得到它 . 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
    
  • 24

    其他答案对我不起作用 . 我一直在搜索并找到一个blog post,其中包含了一个团队如何在docker容器中运行非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 ,但我怀疑其他类似的容器基地也能正常工作 .

  • 1

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

    docker exec -u root -t -i container_id /bin/bash
    
  • 173

    如果你想连接到容器并安装一些东西
    使用apt-get
    首先如上所述从我们的兄弟回答"Tomáš Záluský"

    docker exec -u root -t -i container_id /bin/bash
    

    然后尝试

    运行apt-get update或apt-get'你想要的任何东西'

    它与我合作希望它对所有人都有用

  • 22

    如果您有一个以root身份运行的容器来运行需要访问 sudo 命令的脚本(您无法更改),则可以在 $PATH 中创建一个新的 sudo 脚本来调用传递的命令 .

    例如在你的Dockerfile中:

    RUN if type sudo 2>/dev/null; then \ 
         echo "The sudo command already exists... Skipping."; \
        else \
         echo -e "#!/bin/sh\n\${@}" > /usr/sbin/sudo; \
         chmod +x /usr/sbin/sudo; \
        fi
    

相关问题