将 Docker 镜像内的用户切换为非 root 用户

2024-02-06

我正在尝试将用户切换到 tomcat7 用户以设置 SSH 证书。

当我做su tomcat7, 什么都没发生。

whoami完成后仍然会rootsu tomcat7

Doing a more /etc/passwd,我得到以下结果,清楚地表明 tomcat7 用户存在:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:104::/var/run/dbus:/bin/false
colord:x:102:105:colord colour management daemon,,,:/var/lib/colord:/bin/false
saned:x:103:106::/home/saned:/bin/false
tomcat7:x:104:107::/usr/share/tomcat7:/bin/false

我正在尝试解决 Hudson 中的此错误:

Command "git fetch -t git@________.co.za:_______/_____________.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: Host key verification failed.

这是我的 Dockerfile,它需要一个现有的 hudson war 文件和配置,并构建一个镜像,hudson 运行良好,只是由于用户 tomcat7 的证书不存在而无法访问 git。

FROM debian:wheezy

# install java on image
RUN apt-get update
RUN apt-get install -y openjdk-7-jdk tomcat7

# install hudson on image
RUN rm -rf /var/lib/tomcat7/webapps/*
ADD ./ROOT.tar.gz /var/lib/tomcat7/webapps/

# copy hudson config over to image
RUN mkdir /usr/share/tomcat7/.hudson
ADD ./dothudson.tar.gz /usr/share/tomcat7/
RUN chown -R tomcat7:tomcat7 /usr/share/tomcat7/

# add ssh certificates
RUN mkdir /root/.ssh
ADD ssh.tar.gz /root/

# install some dependencies
RUN apt-get update
RUN apt-get install --y maven
RUN apt-get install --y git
RUN apt-get install --y subversion

# background script
ADD run.sh /root/run.sh
RUN chmod +x /root/run.sh

# expose port 8080
EXPOSE 8080


CMD ["/root/run.sh"]

我正在使用最新版本的 Docker(Docker 版本 1.0.0,内部版本 63fe64c/1.0.0),这是 Docker 中的错误还是我在 Dockerfile 中遗漏了某些内容?


你不应该使用su in a docker文件 https://docs.docker.com/engine/reference/builder/#user,但是您应该使用USERDockerfile 中的指令。

在每个阶段Dockerfile https://docs.docker.com/engine/reference/builder/#user构建时,会创建一个新容器,因此您对用户所做的任何更改都不会保留在下一个构建阶段。

例如:

RUN whoami
RUN su test
RUN whoami

这永远不会说用户会test当第二个 whoami 产生一个新容器时。两者的输出都将是 root(当然除非您事先运行 USER)。

但是如果你这样做:

RUN whoami
USER test
RUN whoami

你应该看到root then test.

或者,您可以使用 sudo 以其他用户身份运行命令,例如

sudo -u test whoami

但似乎使用官方支持的指令更好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Docker 镜像内的用户切换为非 root 用户 的相关文章

  • 如何在运行 .net Core 模板的 Windows docker 容器和 Windows 主机中安装开发证书?

    我已使用 Visual Studio 模板添加 Docker 支持 并且用户机密具有证书的密码 并且用户机密和证书作为卷安装在docker compose override yml volumes APPDATA ASP NET Https
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • Rails:在任何源中都找不到并发 ruby​​-1.0.5 (Bundler::GemNotFound)

    我已经用谷歌搜索了很多 但没有发现任何对我的情况有用的东西 docker compose up abc 在日志中生成以下内容 usr lib ruby vendor ruby bundler spec set rb 92 in block
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • Git 工作流程:分叉项目并维护本地修改副本,但保持最新

    我正在尝试找出最佳工作流程 用于维护具有自定义功能的 github 托管项目 moodle 的本地副本 同时保持保持副本最新的能力 告诉我我正在考虑做的事情是否完全疯狂 分叉项目 github com moodle moodle gt gi
  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • 具有单个子模块的多个存储库

    我已经找了一段时间但没有找到答案 也许我不知道该看什么 我们有一个主库 它本身就是一个存储库 我们称之为 Lib 它包含我们的大部分模块和子模块 我们还假设它的大小为 2GB 现在我们有很多项目 例如 ProjA ProjB ProjC 每
  • git 推送到 github 失败并显示“错误:pack-objects 因信号 967 死亡”

    我触发了这个命令 git push origin master 我得到这个结果 Counting objects 15626 done Delta compression using up to 4 threads error pack o
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • waitpid() 的作用是什么?

    有什么用waitpid 它通常用于等待特定进程完成 或者如果您使用特殊标志则更改状态 基于其进程 ID 也称为pid 它还可用于等待一组子进程中的任何一个 无论是来自特定进程组的子进程还是当前进程的任何子进程 See here http l
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • Bash 脚本:自动为 mpeg-dash 进行 ffmpeg 编码

    我正在编写一个 bash 文件来创建视频编码和串联 以供 dash 实时流媒体使用 基本上 它读取输入视频文件夹 将所有视频编码为三种分辨率格式 然后将它们连接起来创建三个适应集 DIAGRAM 该脚本检查 fps 一致性 如果输入不是 1
  • 为 RHEL 6 安装/构建 git-svn

    我无权访问 RHEL6 存储库 那么在 RedHat Enterprise Linux 6 上构建和 或安装 git svn 工具的最佳方法是什么 通过卸载现有的 yum擦除git 并从源安装最新的来设法安装git和git svn 1 7
  • Bash 正则表达式——似乎无法匹配任何 \s \S \d \D \w \W 等

    我有一个脚本试图从 gparted 获取信息块 我的数据如下所示 Disk dev sda 42 9GB Sector size logical physical 512B 512B Partition Table msdos Number
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost

随机推荐

  • 开发工具“网络”选项卡,在“源”选项卡中打开脚本吗?

    在 Chrome 开发工具中 查看 网络 选项卡时 是否可以选择一个脚本并在 源 选项卡中打开它 双击该脚本将在新的浏览器选项卡中将其打开 由于 源 选项卡按源域 以及文件夹路径 组织所有资源 因此如果您不能立即知道特定脚本的来源 则查找该
  • Android Studio 3.1:找不到 gradle-core.jar (gradle-core-3.1.0.jar)

    我刚刚在以前版本的 android 上安装了 Android Studio 3 1 当我尝试创建新项目时 在项目构建过程中它会停止并提示如下 错误 我使用了很多解决方案 但没有帮助 这是错误消息 错误 找不到 gradle core jar
  • AngularJS TypeError:在 Object.stringify(本机)处将循环结构转换为 JSON

    我正在尝试让这段代码正常工作 显然 代码中有循环引用 但我找不到它 有人可以帮我吗 var appjson APP DATA RETRIEVED fail var appPostRequest get appurl data appconf
  • 使用 Regex C# 删除 HTML 标签的样式

    我想使用 C 从 HTML 标签中删除样式 它应该只返回 HTML 简单标签 对于即 如果String p style margin 15px 0px padding 0px border 0px Hello p 然后它应该返回String
  • 不包含带有 0 个参数的构造函数

    我收到一条错误消息 指出以下代码中的 Products 不包含采用 0 个参数的构造函数 public class Products string id string name double price int soldCount int
  • 使用复选框从数据库表中删除行

    我想在表中显示数据库中的记录 每行都有复选框 该复选框将确定用户是否要删除该特定行 如果选中 我能够显示数据库中的数据 但是当我按下删除按钮时什么也没有发生 我不确定 但我认为错误在于我删除了部分代码 但我可能是错的 我不知道 无论如何 这
  • 使用自定义 Gson 反序列化器反序列化 JSON 响应时出错

    在我使用 Retrofit 的 Android 应用程序中 我尝试反序列化具有包装项目列表的外部对象的 JSON 我使用 GsonConverterFactory 和 Retrofit 实例来反序列化 JSON 我创建了一个自定义反序列化器
  • 是否可以获取Mysql中按列名分组在一起的行列表?

    在我的数据库中 我有一个名为 结果 的表 其中有四列 名称 设备 通过 失败 假设表中有 4 行 如下所示 name device passed failed test1 device 1 2 1 test1 device 2 3 0 te
  • 如何在 iPhone 的 pdf 页面中使用 CGPDFScanner 查找字坐标?

    我正在使用 CGPDFScanner 解析 pdf 页面 但我无法找到搜索结果的坐标 在 void Tm1 CGPDFScannerRef Scanner void info 中 我只获取某些单词的坐标 而不是 pdf 中每个单词的坐标 如
  • tensorflow有没有类似pytorch的“masked_fill_”的功能

    我想通过掩码矩阵将 INF 值设置为矩阵 就像 pytorch 代码一样 scores data masked fill y mask data float inf 我尝试使用tf map fn实现这一点 但性能太慢 那么tensorflo
  • undertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS

    我在负载均衡器后面有一个 Wildfly 它们之间的连接始终是 HTTP 客户端和负载均衡器之间的连接可以是 HTTP 或 HTTPS 负载均衡器设置一个标头 X Forwarded Proto 来让 Wildfly 知道客户端正在使用哪个
  • 为我的对象实现 Save 方法

    我正在尝试改进应用程序的设计 因此不是从表示层调用数据访问层 我将尝试从 BusinessObjects 层中的对象实现保存方法 但我不确定如何通过图层传递对象或其属性 例如 在我的旧设计中 我只是在表示层中创建对象的实例并分配它的属性 然
  • C中数组相关函数参数的区别

    我定义了一个数组 float array 3 4 5 那么 当 array array 0 array 0 0 array 0 0 0 用作函数参数 需要了解的重要一点是 在 C 中 数组并不是完整地作为参数传递的 相反 传递的是指向数组第
  • ui 路由器不会将内容放入指定的 ui-view 中

    当我进入路线时 projects 100 dates 2014 01 01 在 url 中并按回车键 我得到 项目 状态 我预计会触发 projects selected dates 状态 为什么路由不起作用 实际上它在我的机器上本地运行
  • iPhone 横向 - iOS7 R4 图像资源仅无启动图像

    我相当确定这是一个错误 但如果有人找到解决方法 请告诉我 我已经在 Xcode 5 中设置了启动图像的资产目录 如果我设置 iOS 7 R4 图像 则仅当我的应用程序支持纵向方向时才使用它 我的应用程序仅横向显示 我看不到启动图像 iOS
  • 如何在 php 中创建类似 twitter 的 search.json

    我在我的网站上创建了一个 search php 文件 它生成一个 JSON 字符串 帮助我为我的应用程序使用实时 ajax 但现在 我想将它作为 API 向其他人开放 但我发现 get getJSON ajax 不允许使用来自其他服务器 域
  • 使用 Django dumpdata 转储整体数据的子集?

    我正在尝试使用 dumpdata 为数据库生成 JSON 该数据库对于 django 来说足够大 需要很长一段时间才能输出 有没有办法只转储字段的子集 比如说 100 用于测试 我正在使用 MySQL 和 Django 1 0 第三方 dj
  • Plotly:如何在桑基图中设置节点位置?

    样本数据如下 unique list home0 page a0 page b0 page a1 page b1 page c1 page b2 page a2 page c2 page c3 sources 0 0 1 2 2 3 3 4
  • 如何使用冒泡排序对链表进行排序?

    我正在尝试使用冒泡排序来对链接列表进行排序 我使用 curr 和 Trail 来遍历列表 curr 应该总是比 Trail 领先一步 到目前为止 这是我的代码 void linked list sort int i j 0 int coun
  • 将 Docker 镜像内的用户切换为非 root 用户

    我正在尝试将用户切换到 tomcat7 用户以设置 SSH 证书 当我做su tomcat7 什么都没发生 whoami完成后仍然会rootsu tomcat7 Doing a more etc passwd 我得到以下结果 清楚地表明 t