【问题标题】:How ro run sudo su - in Dockerfile如何在 Dockerfile 中运行 sudo su
【发布时间】:2020-05-15 04:53:30
【问题描述】:

我正在尝试在 Dockerfile 中 RUN sudo su - 并收到此错误

/bin/sh: 1: sudo: 未找到

这就是我的Dockerfile 的样子:

FROM ubuntu:18.04
RUN sudo su - 
RUN apt update && install openjdk-8-jdk
RUN wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - && sudo sh -c  'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/kenkins.list'
RUN apt update && apt install jenkins

RUN curl -fsSL get.docker.com | /bin/bash
RUN usermod -aG docker jenkins && systemctl restart jenkins

当我尝试构建它时出现此错误。 docker build -t jenkins . 有人可以帮我吗?

【问题讨论】:

  • 你试过apt update吗?我相信您已经以​​ root 身份运行这些命令,因此不需要 sudo。
  • 所以不需要运行sudo su - ?
  • 有什么理由这样做吗?这个命令似乎没有做任何事情,除了创建一个没有任何有用效果的额外层。
  • 是的,除非您的 jenkins 用户需要 sudo。您可以使用“who”命令检查您正在运行哪些用户的这些命令。如: RUN who 如果您的 jenkins 用户需要 sudo,请查看 - stackoverflow.com/a/25908200
  • 顺便说一句,不推荐使用 systemctl,最佳​​实践告诉你最好使用启动内部服务器的启动脚本,而不是使用控制服务。

标签: linux ubuntu dock


【解决方案1】:

dockerfile 默认以虚拟“root”用户身份运行,因此无需包含任何 sudo 命令。

由于示例脚本不包含“-y”默认值,您似乎只是将手动安装的描述输入到脚本中。这永远不会奏效。而且,在容器中,应用程序还需要在 PID-1 上,而 systemctl 不会这样做。

看完 docker 基础教程后,你会知道原因。

【讨论】:

    【解决方案2】:
    $ cat Dockerfile
    
    FROM ubuntu:18.04
    RUN apt-get update && apt-get install openjdk-8-jdk -y
    

    如果您想更改使用权限,请在 Dockerfile 中使用 USER 标志

    【讨论】:

      【解决方案3】:

      这个命令似乎没有做任何事情,除了创建一个没有任何有用效果的额外层。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-14
        • 1970-01-01
        相关资源
        最近更新 更多