linux - Dockerfile 不会以具有 sudo 权限的用户身份运行脚本

标签 linux bash shell ubuntu docker

我有这个 Docker 文件...

FROM ubuntu:14.04 MAINTAINER Sindhu S sindhu@alum.hackerschool.org
# RUN apt-get update && apt-get -y install sudo wget bash git && rm -rf /var/cache/apt-get/archives/*
RUN adduser --disabled-password --gecos "" scrollback  
RUN adduser scrollback sudo  
RUN echo 'scrollback ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers RUN mkdir -p /home/scrollback && chown -R scrollback:scrollback /home/scrollback
WORKDIR /home/scrollback/ 
ADD https://raw.githubusercontent.com/sindhus/scrollback/install-script/tools/install.sh /home/scrollback/install.sh 
RUN chown scrollback:scrollback install.sh
RUN chmod +x install.sh
USER scrollback RUN ["/bin/bash", "-c", "/home/scrollback/install.sh"]

正如您所看到的,它应该以回滚用户身份运行 install.sh (该用户具有 sudo 权限)。基本上,脚本不应该以 root 身份运行,而应该以具有 sudo 权限的用户身份运行,因为我们需要修改一些系统文件。

我尝试过:

RUN ["/bin/bash", "-c", "sudo touch/etc/apt/sources.list.d/pgdg.list"]

这有效!

但是当我有这行代码时:

RUN ["/bin/bash", "-c", "/home/scrollback/install.sh"]

脚本中有一行:

$(sudo echo $apt_source >/etc/apt/sources.list.d/pgdg.list)

我得到...

将 Postgres 的 deb http://apt.postgresql.org/pub/repos/apt/trusty-pgdg 主源添加到您的软件源列表中(需要 root 用户权限).. ./install.sh:第136行:/etc/apt/sources.list.d/pgdg.list:权限被拒绝

我该如何解决这个问题?

最佳答案

在 bash 脚本中使用 sudo 并不是一个好的做法。相反,直接使用该命令并使用 sudo 运行脚本。因此,您的脚本(以及在其中启动的程序)将以 root 权限启动。

关于linux - Dockerfile 不会以具有 sudo 权限的用户身份运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136799/

相关文章:

python - 如何让树莓派通过USB连接响应Arduino代码

linux - 如何构建内核模块的单个源文件

python - 根据有趣单词的字典从电子邮件列表中识别最常见的单词

linux - 在Linux中连续监视日志,并在发现错误时发送电子邮件?

python - 在 python 中执行 ls 输出魔术

linux - linux 什么东西占用内存

php - 当 php 使用 shell_exec() 执行脚本时,Python 'No module named ...'

linux - bash shell脚本的多个命令

shell - 如何在awk中对模式进行if else匹配

c - 是否可以在同一父进程(LINUX、POSIX)创建的两个子进程之间建立管道