46-Dockerfile-USER/WORKDIR指令

news2024/10/7 12:24:57

USER/WORKDIR指令

      • 前言
      • USER
        • 作用
        • 格式
        • 使用示例
      • WORKDIR
        • 作用
        • 格式
        • 说明
        • 使用示例


前言

  • 本篇来学习下Dockerfile中的USER/WORKDIR指令

USER

作用

  • 指定运行容器时的用户名或 UID,后续的RUN等指令也会使用指定的用户身份

说明:

  1. USER 只是帮助我们切换到指定的用户而已,这个用户必须事先建立好的,否则无法切换
  2. USER 改变之后层的执行 RUN 、CMD 、以及 ENTRYPOINT 这类命令的身份

格式

USER <user>[:<group>]USER <UID>[:<GID>]

使用示例

  • 新建test.txt
echo test > test.txt
  • 新建dockerfile
FROM alpine
LABEL maintainer="大海"
# 创建用户和组
RUN addgroup -S test && adduser -S test -G test -h /home/test
# USER 只是帮准我们切换到指定的用户而已,这个用户必须事先建立好的,否则无法切换
USER test:test

# 拷贝文件
COPY *.txt /test/
# 一旦声明了 USER 之后,USER 后面的 RUN、CMD、ENTRYPOINT 的身份就是 test ,而 test.txt 是主机生成的,身份是 root ,必然会报错,权限不对。
RUN cd /test && ls -l && echo 1111 > test.txt
  • 运行查看效果
docker build -t test --force-rm --no-cache .

在这里插入图片描述

  • 修改dockerfile
    • chown 修改文件权限
FROM alpine
LABEL maintainer="大海"
# 创建用户和组
RUN addgroup -S test && adduser -S test -G test -h /home/test
# USER 只是帮准我们切换到指定的用户而已,这个用户必须事先建立好的,否则无法切换
USER test:test

# 拷贝文件 chown 改变复制文件的权限
COPY --chown=test:test  *.txt /test/
# 一旦声明了 USER 之后,USER 后面的 RUN、CMD、ENTRYPOINT 的身份就是 test ,而 test.txt 是主机生成的,身份是 root ,必然会报错,权限不对。
RUN cd /test && ls -l && echo 1111 > test.txt
  • 运行查看效果
    在这里插入图片描述

WORKDIR

作用

  • 为 Dockerfile 中跟随它后面的 RUN 、CMD 、ENTRYPOINT、 COPY、ADD 指令设置工作目录

格式

WORKDIR /a/b/c

说明

  1. 在 WORKDIR 中需要使用绝对路径,如果镜像中对应的路径不存在,会自动创建此目录
  2. 一般用 WORKDIR 来替代 RUN cd && 切换目录进行操作的指令
  3. 如果提供了相对路径,则它将相对于上一个 WORKDIR 指令的路径,如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

# 效果:/a/b/c

使用示例

  • 新建dockerfile
FROM alpine

RUN pwd && ls -l

WORKDIR /app

RUN pwd && ls -l

COPY *.txt .

RUN ls -l
  • 运行查看效果
docker build -t test --force-rm --no-cache .

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/507575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

12_Uboot启动流程_4

目录 images全局变量 do_bootz函数 bootz_start函数 do_bootm_states函数 bootm_os_get_boot_func函数 do_bootm_linux函数 images全局变量 不管是bootz还是bootm命令,在启动Linux内核的时候都会用到一个重要的全局变量:images, images在文件cmd/bootm.c中有如下定义: i…

【2023/05/09】Scratch

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第4天。 Share The mighty desert is burning for the love of a blade of grass who shaks her head and laughs and flies away. 译文&#xff1a; 无垠的沙漠热烈追求一叶绿草的爱&#xff0c;她摇摇…

PCL中点云分割算法简析

文章目录 前言一、点云分割算法简介1.1 基于RANSAC的点云分割1.2 基于聚类的点云分割1.2.1 欧式聚类分割 1.3 基于深度学习的点云分割 二、算法示例2.1 基于RANSAC的平面分割2.2 欧式聚类2.3 基于PointNet的点云分割 总结 前言 点云分割算法广泛应用于激光遥感、无人驾驶、工业…

centos安装nginx教程

安装所需环境 Nginx 是 C语言 开发&#xff0c;建议在 Linux 上运行&#xff0c;当然&#xff0c;也可以安装 Windows 版本&#xff0c;本篇则使用 CentOS 7 作为安装环境。 一. gcc 安装 安装 nginx 需要先将官网下载的源码进行编译&#xff0c;编译依赖 gcc 环境&#xff0c…

【ESD专题】案例:TVS管钳位电压能不能通过TLP测试数据表征?

这几天遇到一个问题,就是还是想说TVS管导入的时候需要进行IEC61000-4-2 8kV接触静电的钳位波形测试。 比如有时可以看到规格书中给出对应的在IEC61000-4-2 8kV接触时的真实钳位波形: 根据我们文章【ESD专题】TVS管的选择的误区及钳位电压测试方法和一些参考手册所说…

计算机操作系统第四版第七章文件管理—课后习题答案

1.何谓数据项、记录和文件&#xff1f; 数据项&#xff1a;是最低级的数据组织形式&#xff0c;可以分为两种类型&#xff1a;基本数据项和组合数据项。基本数据项是用于描述一个对象的某种属性的字符集&#xff0c;是数据组织中可以命名的最小逻辑数据单位&#xff0c;又称为字…

使用volta对node版本进行控制

安装volta 首先下载volta 下载完成之后在电脑上使用命令行工具查看是否安装成功 volta -v 使用 volta -h 命令可以查看volta的一些用法 安装全局的node版本,可以有三种,第一种是安装最新的,第二种是安装某一个大版本下的,第三种是安装指定的node版本(安装的时候需要等待一段时…

Rest风格复习

Rest风格复习 简介三种注解的风格快速开发 简介 通过一段路径和访问方式来确定访问资源的行为方式 使用POST方式 // value定义 路径 method定义访问的方式RequestMapping(value "/users",method RequestMethod.POST)ResponseBodypublic String save(){System.out.…

Andrew Ng和OpenAI教你写prompt

课程地址&#xff1a; https://learn.deeplearning.ai/chatgpt-prompt-engb站搬运&#xff1a; https://www.bilibili.com/video/BV1No4y1t7Zn 教学人员&#xff1a;Lsa Fulford&#xff0c; Andrew NG LLM的两种样式 Base LLM:基于文本训练数据预测下一个词的概率&#xff0…

制作Alpine Linux镜像报错errors: 15 distinct packages available

1.执行报错 执行docker build -t 镜像:版本 -f Dockerfile . 报错&#xff1a; 2.查看网上的解决思路 网上文档解决思路&#xff1a; 这边我做了一下改变把这些写入了dockerfile 加了几个RUN RUN rm -rf /var/cache/apk RUN mkdir -p /var/cache/apk RUN apk update -v 发现还…

Java基本数据类型详解及应用示例

Java作为一门强类型语言&#xff0c;基本数据类型是非常重要的概念。Java中基本数据类型分为四种类别&#xff1a;整数类型、浮点数类型、字符类型和布尔类型。其中&#xff0c;每一种数据类型都有着不同的占用字节数和表示范围&#xff0c;合理使用选择不同的数据类型可以提高…

数组低效的“插入”和“删除”

插入操作 假设数组的长度为 n&#xff0c;现在&#xff0c;如果我们需要将一个数据插入到数组中的第 k 个位置。为了把第 k 个位置腾出来&#xff0c;给新来的数据&#xff0c;我们需要将第 k&#xff5e;n 这部分的元素都顺序地往后挪一位。那插入操作的时间复杂度是多少呢&a…

ChatGPT 中文指令指南,教会你如何使用chatgpt实现中文你想要的答案

&#x1f9e0; ChatGPT 中文指令指南&#xff0c;教会你如何使用chatgpt实现中文你想要的答案 1.学习英语–替代词典 App 场景例子Prompts解释中文英文意思&#xff0c;并解释单词的词根词缀。可以替代词典。告诉我 Egocentric 的词性和音标&#xff0c;并使用中文和英文解释…

OpenAI开源语音识别模型Whisper在Windows系统的安装详细过程

1、安装Python Python的安装很简单&#xff0c;点击这里进行下载。 安装完成之后&#xff0c;输入python -V可以看到版本信息&#xff0c;说明已经安装成功了。 如果输入python -V命令没有看到上面的这样的信息&#xff0c;要么是安装失败&#xff0c;要么是安装好之后没有自…

【自然语言处理】【大模型】CodeGen:一个用于多轮程序合成的代码大语言模型

CodeGen&#xff1a;一个用于多轮程序合成的代码大语言模型 《Code Gen: An Open Large Language Model For Code with Multi-Turn Program Synthesis》 论文地址&#xff1a;https://arxiv.org/pdf/2203.13474.pdf?trkpublic_post_comment-text 相关博客 【自然语言处理】【大…

【EasyPoi实战系列】Spring Boot使用EasyPoi实现一对多的导出 - 第469篇

​ 历史文章&#xff08;文章累计460&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》…

Exams/2012 q1g

module top_module (input [4:1] x,output f ); assign f ~x[2]&~x[4] | ~x[1]&x[3] | x[2] & x[3] & x[4]; endmodule

4-Tr0ll-1百个靶机渗透(精写-思路为主)

文章目录 目录 文章目录 前言 一、信息收集 二、提权 1.提权方法1 2.提权方法2 3.提权方法3 4.提权方法4 5.root免密登录的方法 总结 前言 思路清晰&#xff1a; 1.信息收集&#xff0c;寻找内网靶机&#xff0c;得到可以利用的ftp、ssh和web站点的常规端口。 2.因为这个靶机…

Visual Studio 2019离线安装包获取和安装教程

摘要 介绍Visual Studio 2019离线安装方法和配置及注意事项 关键词 VS2019 离线安装 Visual Studio 2019版本与以往的2015、2013、2012版本不同&#xff0c;采用了新的模块化安装方法。微软官方也并未提供ISO镜像&#xff0c;根据官方提供的离线下载方案&#xff08;docs.mic…

「AI 孙燕姿」翻唱华语乐坛歌曲爆红全网,AI 翻唱将带来哪些影响?是否会有版权等问题?

在某视频平台上&#xff0c;“AI孙燕姿”成了新网红&#xff0c;它翻唱过周杰伦的《发如雪》、翻唱过郭顶的《水星记》、翻唱过赵雷的《我记得》&#xff0c;受到了网友的追捧&#xff0c;甚至有网友宣布“这是2023年最火的声音”。 网上除了AI孙燕姿&#xff0c;还有AI周杰伦…