sh容器启动脚本在容器中挂载外部的应用并在容器启动的时候启动,参数传递使用环境变量#bash#docker(代码片段)

author author     2022-12-17     465

关键词:

nvidia-docker run -d --rm \
        -e TZ=Asia/Shanghai  \
		-e AILAB_EXEC_SCRIPT="/etc/ailab-init/startup-vnc.sh#"  \
		-e USER_NAME=test \
		-e LANG=zh_CN.UTF-8  \
		-e RESOLUTION=1024x768x16  \
		-v `pwd`/ailab-init:/etc/ailab-init \
		--entrypoint bash \		
		-p 46080:8282 -p 45901:5900 \
		-e  VNC_PASSWORD=111111 \
		test:v0.4  /etc/ailab-init/startup-env.sh
#!/bin/bash

debug()

	if [ -n "$AILAB_DEBUG" ];then
		echo "$@" >>/tmp/$PROG.log
	fi


add_user()

	local opts=""
	[ -n "$USER_HOME" ] && opts="$opts -md $USER_HOME"
	[ -n "$USER_ID" ] && opts="$opts -u $USER_ID"
	[ -n "$USER_SHELL" ] && opts="$opts -s $USER_SHELL"
	[ -n "$GROUP_NAME" ] && opts="$opts -g $GROUP_NAME"

	if ! grep -q $GROUP_NAME /etc/group ;then
		groupadd -g $GROUP_ID $GROUP_NAME
	fi

	debug "add user: $USER_NAME"
	useradd $opts $USER_NAME

	debug "chpasswd: $USER_NAME"
	echo $USER_NAME:$USER_PASSWD|chpasswd

	debug "chpasswd: root"
	echo root:$ROOT_PASSWD|chpasswd
	
	mkdir -p /etc/sudoers.d
	echo "$USER_NAME ALL=(ALL) NOPASSWD: ALL" >/etc/sudoers.d/$USER_NAME


clean_up()

	unset ROOT_PASSWD
	unset USER_NAME
	unset USER_PASSWD
	unset USER_HOME
	unset USER_ID
	unset USER_SHELL
	unset GROUP_NAME
	unset GROUP_ID
	unset HOME_DIR


pre_exec()

	add_user


exec_cmd()

	#AILAB_EXEC_SCRIPT="date#ls -l"
	OLD_IFS=$IFS
	IFS='#' read -r -a exec_array <<< "$AILAB_EXEC_SCRIPT"
	for i in "$exec_array[@]";do
		debug "execute custom process $i"
		$i &
	done
	IFS=$OLD_IFS
	debug "clean up enviroment variable"
	clean_up
	/usr/sbin/sshd -D


main()

	pre_exec
	exec_cmd


export AILAB_DEBUG="1"
PROG=$(basename $0)
export ROOT_PASSWD=$ROOT_PASSWD:-"p@ssw0rd"
export USER_NAME=$USER_NAME:-"ailab"
export USER_PASSWD=$USER_PASSWD:-"ailab"
export HOME_DIR=$HOME_DIR:-"/home"
export USER_HOME=$HOME_DIR/$USER_NAME
export USER_ID=$USER_ID:-"1000"
export USER_SHELL=$USER_SHELL:-"/bin/bash"
export GROUP_NAME=$GROUP_NAME:-"student"
export GROUP_ID=$GROUP_ID:-"1000"

main "$@"

docker-容器

容器容器的状态用dockercontaierls启动容器启动一个容器的终端,并允许交互dockerrun-itubuntu:16.04/bin/bash当利用dockerrun来创建容器时,Docker在后台运行的标准操作包括:检查本地是否存在指定的镜像,不存在就从公有仓库下载利用镜... 查看详情

操作docker容器(代码片段)

Docker容器时镜像的一个运行实例,而镜像是静态的只读文件,容器带有运行时需要的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行的环境和其他系统环境)和跑在上面的应用,那么Docker容器就... 查看详情

entrypoint/cmdprocess入口点进程是什么?docker容器dockerfileentrypoint.sh文件作用,为什么在脚本开头要执行source~/.bashrc?

...gine/reference/commandline/attach/#description有点看不太懂:CMD容器启动命令&ENTRYPOINT入口点——Dockerfile20230212Docker容器Dockerfileentrypoint.sh文件作用Docker容器entrypoint.sh是一个脚本文件,用于在Docker容器启动时执行某些操作。(... 查看详情

如何在不同的(依赖的)容器启动后对 docker 容器运行 .sql 脚本?

】如何在不同的(依赖的)容器启动后对docker容器运行.sql脚本?【英文标题】:Howtorun.sqlscriptagainstdockercontainerafteradifferent(dependent)containerstarts?【发布时间】:2022-01-0201:31:56【问题描述】:我有一个SpringBoot应用程序容器myApi,它... 查看详情

AWS ECS 在一个任务定义中启动多个容器

】AWSECS在一个任务定义中启动多个容器【英文标题】:AWSECSstartmultiplecontainersinonetaskdefinition【发布时间】:2019-04-0806:31:36【问题描述】:我有一个带有一个应用程序的docker容器,应用程序根据输入参数运行,传递到入口点。我想... 查看详情

dockerindocker

dockerrun--rm可以从一个镜像启动容器,并在容器执行完成后自动删除,这在计算任务中非常有用。例如,我们通过以下步骤完成计算任务容器的启动:1将输入数据通过卷挂载方式连接到计算任务容器;2容器启动,执行命令启动工... 查看详情

docker6section(代码片段)

操作容器启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。新建并启动命令:dockerrun例如,下面的命令输出一个“HelloWorld”,之后终止容器。$dockerruncentos:7/bin/echo... 查看详情

dockercompose多容器应用

...用程序的工具。用Compose,你可以在一个文件中定义多个容器应用程序,然后只需一条命令就可以完成使其运行所需的所有操作。一个使用Docker容器的应用程序通常是由多个容器组成的。使用DockerCompose,不需要编写shell脚本来启... 查看详情

docker学习之路操作docker容器

1.1.创建容器主要介绍容器的create、start、run、wait和logs子命令1.1.1新建容器创建容器dockercreate-itubuntu:latest查看容器dockerps-a  create参数说名:     -i:标准输入     -t:分配一个伪终端1.2.1.启... 查看详情

将 BLOB 容器挂载为 AppService 中的目录

】将BLOB容器挂载为AppService中的目录【英文标题】:MountBLOBContainerasadirectoryinAppService【发布时间】:2021-12-1219:46:43【问题描述】:我们有一个在AppService(Windows)上运行的Angular应用程序,并且在BLOB存储上存在大量SCORM包。要启动SCORM... 查看详情

docker~写个容器启动的bash脚本

...以把一般指令组织在一起,统一去执行,比如我有一些docker容器需要统一去启动,这时,你可以把它们写成一个bash脚本,但有一点要注意,你的文档格式需要是unix,大家可以使用notepad++表写脚本,然后上传到linux上就行了!如果你希望现时... 查看详情

docker容器启动mysql执行初始化sql脚本实现(代码片段)

文章目录背景准备工作实现过程背景docker容器方式启动Mysql想在启动后执行一些初始化sql脚本(如创建访问数据库的user以及赋予相应权限,执行db创建sql脚本,执行table创建的sql脚本).且这个初始化过程全局只运行一次(比如中途停掉... 查看详情

docker容器启动mysql执行初始化sql脚本实现(代码片段)

文章目录背景准备工作实现过程背景docker容器方式启动Mysql想在启动后执行一些初始化sql脚本(如创建访问数据库的user以及赋予相应权限,执行db创建sql脚本,执行table创建的sql脚本).且这个初始化过程全局只运行一次(比如中途停掉... 查看详情

sh在docker容器中启动mongodb并检查公开的端口(代码片段)

查看详情

sh[hdf3.0docker容器启动脚本]使用此脚本启动hdf3.0docker容器#docker#hdf#sandbox(代码片段)

查看详情

docker容器启动自动启动shell脚本

参考技术A1、先将容器打包成镜像2、start.sh3、制作dockerflie构建镜像lnmp:6启动容器进入容器查看nginx、php-fpm进程 查看详情

容器在启动时重定向日志文件的方法(代码片段)

...在启动时重定向日志的方法1.背景介绍:将java程序部署到容器中时,通常通过java-jar命令进行启动,这个方式输入的日志在控制台。如果要将该命令输出的日志重定向到容器中的某个文件中,必须通过自定义启动脚本写明重定向... 查看详情

docker容器启动时执行脚本run/bin/bash执行多条指令

1、首先需要编写需要启动的脚本,并将脚本放在/etc/init.d/目录下如:cs.sh2、修改权限3、chkconfig--addcs.sh4、chkconfigcs.shon启动容器时dockerrun-idt***/***/bin/bashcs1.shcs2.shcs3.sh最好在每个脚本后面都加上tail-f/dev/null  查看详情