Dockerfile另一种使用普通用户启动的方式

基础镜像的Dockerfile

# 使用 Debian 11.9 的最小化版本作为基础镜像  
FROM debian:11.11# 维护者信息  
LABEL maintainer="caibingsen"  # 复制自定义的 sources.list 文件(如果有的话)  
COPY sources.list /etc/apt/sources.list  # 创建一个目录来存放 JDK  
RUN mkdir -p /usr/java/jdk1.8.0_191-amd64 && mkdir /hskj && useradd -m bjxtb -d /hskj && chown bjxtb. /hskj# 安装必要的依赖,并清理 apt 缓存  
#RUN apk add --no-cache procps && apt-get install -y procps
RUN apt-get update &&  apt-get install -y locales && \apt-get install -y --no-install-recommends procps curl telnet net-tools vim && \apt-get install gosu && \rm -rf /var/lib/apt/lists/*# 生成zh_CN.UTF-8 locale
RUN sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen && \locale-gen
# 设置环境变量,以支持中文
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN:zh
ENV LC_ALL zh_CN.UTF-8# 将 JDK 目录复制到容器中(假设你已经在构建上下文中准备好了这个目录)  
COPY jdk1.8.0_191-amd64 /usr/java/jdk1.8.0_191-amd64 # 设置 JAVA_HOME 和 PATH 环境变量  
ENV JAVA_HOME=/usr/java/jdk1.8.0_191-amd64
ENV PATH=$JAVA_HOME/bin:$PATH  ENV TZ Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime# 调整系统配置  
RUN echo "fs.file-max = 65536" >> /etc/sysctl.conf && \  echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf && \  echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf && \  echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf && \  echo "vm.swappiness = 10" >> /etc/sysctl.conf && \  echo "net.core.somaxconn=2048" >> /etc/sysctl.conf && \  echo "* soft nofile 60000" >> /etc/security/limits.d/user-nofile.conf && \  echo "* hard nofile 60000" >> /etc/security/limits.d/user-nofile.conf && \  echo "* soft nproc 50000" >> /etc/security/limits.d/20-nproc.conf && \  echo "root soft nproc unlimited" >> /etc/security/limits.d/20-nproc.conf#增加entrypoint.sh
ADD ./entrypoint.sh /entrypoint.sh##给entrypoint.sh增加权限
RUN  chmod +x /entrypoint.sh# 容器启动时执行的命令  
ENTRYPOINT ["sh","/entrypoint.sh"]

启动脚本entrypoint.sh 

#!/bin/bash
set -e
# 先更改文件和目录的所有权
chown -R bjxtb /hskj
# 以 bjxtb 身份运行其他命令
exec gosu bjxtb "$@"

 这行注释说明了 exec 命令的目的。

  • exec gosu bjxtb "$@" 命令执行以下操作:
    • gosu 是一个类似于 sudo 的工具,但它是为 Docker 容器设计的,用于在容器中切换用户。
    • bjxtb 是要切换到的用户。
    • "$@" 是一个特殊的 shell 参数,它代表脚本接收到的所有位置参数(即传递给脚本的命令行参数)。
    • exec 命令用于替换当前 shell 进程为 gosu 进程。这意味着脚本中 exec 后面的任何命令都不会被执行,因为 exec 已经用 gosu 替换了当前的 shell。gosu 然后以 bjxtb 用户的身份执行传入的命令。

这个脚本非常适合在 Docker 容器中使用,其中可能需要以非 root 用户的身份运行应用程序。通过更改文件所有权并以特定用户身份运行应用,可以增强容器的安全性。

应用服务的dockerfile文件

FROM hub./base_java/debian-jdk8-base:1.0.4
WORKDIR /hskj/appCOPY ./app.jar /hskj/app/app.jar
COPY ./script/* /bin
RUN chmod 774 /bin/*.shEXPOSE 8080
#
CMD ["sh", "/bin/start.sh"]

如果对你有帮助,一块也是爱

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

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

相关文章

力扣707题——设计链表

#题目 从零开始设计链表,我们拆分成两次任务,今天先看1 ,2 ,4 #代码

leetcode刷题记录(七十二)——146. LRU 缓存

(一)问题描述 146. LRU 缓存 - 力扣(LeetCode)146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类: * LRUCache(int capacity)…

微信小程序:实现单选,多选,通过变量控制单选/多选

一、实现单选功能 微信小程序提供了 radio 组件来实现单选功能。radio 组件需要配合 radio-group 使用。 1. WXML 代码 <radio-group bindchange"onRadioChange"><label wx:for"{{items}}" wx:key"id"><radio value"{{it…

vue2使用flv.js在浏览器打开flv格式视频

组件地址&#xff1a;GitHub - bilibili/flv.js: HTML5 FLV Player flv.js 仅支持 H.264 和 AAC/MP3 编码的 FLV 文件。如果视频文件使用了其他编码格式就打不开。 flv.vue <template><div><el-dialog :visible.sync"innerVisibleFlv" :close-on-pre…

Spring 中的事件驱动模型

事件驱动的基本了解 事件模式也就是观察者模式&#xff0c;当一个对象改变的时候&#xff0c;所有依赖的对象都会收到一个通知。 Subject&#xff1a;抽象主题 Observer&#xff1a;具体主题 Concrete Subject&#xff1a;抽象观察者&#xff0c;在得到更新通知之后去更新自…

STM32补充——IAP

0 前置知识&#xff1a; FLASH相关内容&#xff1a;前往STM32补充——FLASH STM32三种烧录方式&#xff08;看看就行&#xff09;&#xff1a; 1.ISP&#xff1a;In System Programming&#xff08;在系统编程&#xff09; 执行芯片厂商的 Bootloader 程序进入 ISP 模式&…

k8s的CICD实施项目

环境需求&#xff1a; 目前领导需要做一个需求&#xff0c;临时把我从运维岗位&#xff0c;把我调度到到专家组让我主导cicd的项目实施 目前环境资源 k8s环境&#xff0c;28台服务器&#xff0c;上面是k8s集群&#xff0c;要实施一个测试环境的cicd以及一个生产环境的cicd gitl…

【线性代数】基础版本的高斯消元法

[精确算法] 高斯消元法求线性方程组 线性方程组 考虑线性方程组&#xff0c; 已知 A ∈ R n , n , b ∈ R n A\in \mathbb{R}^{n,n},b\in \mathbb{R}^n A∈Rn,n,b∈Rn&#xff0c; 求未知 x ∈ R n x\in \mathbb{R}^n x∈Rn A 1 , 1 x 1 A 1 , 2 x 2 ⋯ A 1 , n x n b 1…

AIGC视频生成模型:Runway的Gen系列模型

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍Runway开发的视频生成模型Gen系列&#xff0c;包括Gen-1、Gen-2和Gen3 Alpha等&#xff0c;这些模型每次发布都震惊AI圈&#xff0c;荣获多个视频生成的…

【JVM-9】Java性能调优利器:jmap工具使用指南与应用案例

在Java应用程序的性能调优和故障排查中&#xff0c;jmap&#xff08;Java Memory Map&#xff09;是一个不可或缺的工具。它可以帮助开发者分析Java堆内存的使用情况&#xff0c;生成堆转储文件&#xff08;Heap Dump&#xff09;&#xff0c;并查看内存中的对象分布。无论是内…

【基于无线电的数据通信链】Link 11 仿真测试

〇、废话 Link 11 仿真测试 涉及多个方面&#xff0c;包括信号仿真、协议模拟、数据链路层的仿真以及网络性能评估等。Link 11 是一种基于 HF&#xff08;高频&#xff09; 或 UHF&#xff08;超高频&#xff09; 波段的无线通信协议&#xff0c;主要用于军事通信系统中。为了…

AG32 FPGA 的 Block RAM 资源:M9K 使用

1. 概述 AG32 FPGA 包含了 4 个 M9K 块&#xff0c;每个 M9K 块的容量为 8192 bits&#xff0c;总计为 4 个 M9K&#xff08;4K bytes&#xff09;。这使得 AG32 的内部存储非常适合嵌入式应用&#xff0c;能够有效地利用片上资源。 M9K 参数 参考自《AGRV2K_Rev2.0.pdf》。…

【算法笔记】力扣热题100(LeetCode hot-100)438. 找到字符串中所有字母异位词 滑动窗口

力扣热题100&#xff08;LeetCode hot-100&#xff09;之 438. 找到字符串中所有字母异位词 本文主要记录算法思路&#xff0c;着急要答案的同学可以直接跳转到最后的代码。 题目 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词 的子串&#xff0c;返回这些子…

Hadoop•搭建完全分布式集群

听说这里是目录哦 一、安装Hadoop&#x1f955;二、配置Hadoop系统环境变量&#x1f96e;三、验证Hadoop系统环境变量是否配置成功&#x1f9c1;四、修改Hadoop配置文件&#x1f36d;五、分发Hadoop安装目录&#x1f9cb;六、分发系统环境变量文件&#x1f368;七、格式化HDFS文…

【机器人学】2-3.六自由度机器人运动学逆解-工业机器人【附MATLAB代码】

解析解推导 假设有一工业机器人参数如下图所示&#xff1a; matlab代码 clc;clear; %带入机器人初始值 d1 0.670; d4 1.280; d6 0.215;a2 0.312; a3 1.075; a4 0.225;Position[288.1, -433.1, 2832,96.9158, -29.6162, 109.3547]; px Position(1)/1000; py Positio…

ARM学习(42)CortexM3/M4 MPU配置

笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…

PIC单片机HEX文件格式分析

在调试PIC单片机在bootloader程序时&#xff0c;需要将hex文件转换为bin文件&#xff0c;在转换之前先了解一下hex文件中数据是如何定义的。 直接打开一个LED灯闪烁的程序生成的hex文件&#xff0c;芯片型号为PIC18F46K80 可以看到每条数据都是由6部分组成的&#xff0c;下面分…

用户中心项目教程(四)---Vue脚手架完成前端初始化

目录 1.项目的创建 2.使用开发工具打开 3.项目运行方法 4.使用按钮组件 5.全局注册 6.如何进行组件的测试 7.使用组件的效果展示 8.关于这个vue项目内容的说明 1.项目的创建 这个前提你是你完成了我的教程&#xff08;三&#xff09;里面的相关配置&#xff0c;不然你可…

【GitHub】登录时的2FA验证

一、如何进行2FA认证 1.在你的浏览器中下载 Authenticator身份验证插件 2.使用身份验证器添加凭证 2.1 使用身份验证器扫描验证二维码 选择扫描二维码

目标跟踪算法发展简史

单目标跟踪&#xff08;Single Object Tracking&#xff0c;SOT&#xff09;是计算机视觉领域中的一个重要研究方向&#xff0c;旨在在视频序列中持续定位并跟踪一个特定目标。随着计算机视觉和机器学习技术的飞速发展&#xff0c;单目标跟踪算法经历了从经典方法到深度学习的演…