Docker容器启动时运行shell脚本

news/2024/12/22 2:56:29/

文章目录

  • 需求
  • docker开机运行
  • docker容器开机运行
  • docker容器启动时运行脚本
  • 执行多个脚本
  • docker容器进入时启动脚本
  • docker容器启动后退出
  • 参考文献

需求

来源于部署在liux上的Docker服务如何自动运行,而不是手动运行,因为输入数据是变化的,这里根据的是如果存在输入数据,被Docker服务监听到,则自动运行Docker服务中的代码。

docker开机运行

对于Ubuntu18.04以上的系统,如果是使用命令sudo apt-get install -y docker.io安装的docker,都可以使用下列命令设置开机启动docker

systemctl enable docker

docker容器开机运行

很多时候我们都有这样的需求,在开机的时候自动运行容器,并且容器被意外关闭时,能够自动重启,这个时候我们加入 --restart=always·属性即可满足该需求。

  • restart=always 表示无论如何退出都会自启动
    命令如下
docker update --restart=always 容器名字或ID

或者在运行镜像时就加入–restart=always属性

docker run -itd --name test --restart=always amd64/ubuntu:18.04 /bin/bash 

docker容器启动时运行脚本

首先要写个一个开机脚本,脚本内容是你想要的程序。然后将其保存在容器中的根目录或者任意目录下。然后在run容器时,加上该脚本,这样每次容器启动后,在容器中都会运行该脚本。命令如下:

docker run  -itd --name test --restart=always amd64/ubuntu:18.04 /bin/bash  PATH/run.sh

需要注意的是:

  • PATH 是 docker 中的绝对路径
  • 脚本(如run.sh)必须写Docker中的绝对路径PATH,而不是docker外部的命令
  • 前面必须有 /bin/bash

该语句的意思就是启动容器时,使用/bin/bash 来运行 /PATH/script.sh 这个脚本, -itd 的意思是在后台执行这个脚本

执行多个脚本

有些时候,如果我们需要使用多个脚本,可以使用一个脚本来启动其它的脚本,也可以使用下列命令

docker run -itd --name test --restart=always amd64/ubuntu:18.04 /bin/bash PATH/1.sh;PATH/2.sh;PATH/3.sh

docker容器进入时启动脚本

docker exec -itd docker_name /bin/bash PATH/1.sh

docker容器启动后退出

使用 docker ps -a可以查看容器的运行状态,如果我们使用docker start启动容器后,容器自动退出,且docker ps -a看到状态为Exit(0),那么说明是我们写的脚本没有循环,导致docker执行完脚本以后自动退出,那么只要在自己写的脚本后面加上/bin/bash,如下

#!/bin/bash
#ls
#cd /
#more
/bin/bash

重新打开一个bash,就可以防止容器执行完脚本后退出

参考文献

  • https://blog.csdn.net/ytusdc/article/details/127028823

http://www.ppmy.cn/news/70460.html

相关文章

22. Unity - 3D游戏开发小计01 --- 修复动画BUG、更改环境光照、导航网格、相机跟随、场景渲染后期处理

1. 导入玩家角色模型 素材来自于unity官网:3D Beginner:Tutorial Resources 在3D游戏开发中,三维物体模型一般会有团队内的其它成员提供,包括模型本身和动画文件等。我们需要做的是将这些素材进行组合并使用代码进行控制。 若对模型添加动画文件后,当运行时可能会发现模型…

C++:深入理解C++11新特性:Chapter3:左值和右值

Chapter3:左值和右值 1. 将右值绑定到 左值2. 将右值绑定到 常量左值引用3. 将右值绑定到右值引用总结:5. 左值,右值和右值引用6. 引用类型可以引用的的值类型7. 全能类型,常量左值引用用途7.1 拷贝构造函数7.2解决浅拷贝&#xf…

chatGPT生成的:前端学习导航

MDN Web 文档:提供关于 HTML、CSS、JavaScript 等前端技术的详细文档和指南。W3Schools:提供在线教程,覆盖了 HTML、CSS、JavaScript 和其他前端技术的基础知识。freeCodeCamp:一个开源的学习平台,提供免费的编程课程和…

红黑树(RBTree)

红黑树的基本性质 (1)红黑树是每个结点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉搜索树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 性质1. 结点是红色或黑色。 性质2. 根结点是黑色。 性质…

包管理工具:pnpm | 京东云技术团队

作者:京东零售 杨秀竹 pnpm 是什么 pnpm( performant npm )指的是高性能的 npm,与 npm 和 yarn 一样是一款包管理工具,其根据自身独特的包管理方法解决了 npm、yarn 内部潜在的安全及性能问题,在多数情况…

SQL 常用函数总结(二)

字符串处理函数 1. CONCAT() 函数功能:将两个或多个字符串合并成一个字符串。 函数语法: CONCAT(string1, string2, ...)string1、string2 等的数量可以是零个或多个,分别表示需要合并的字符串。 使用示例: 假设现在有一个名…

软件测试工程师的职业发展方向

一、软件测试工程师大致有4个发展方向: 1 资深软件测试工程师 一般情况,软件测试工程师可分为测试工程师、高级测试工程师和资深测试工程师三个等级。 达到这个水平比较困难,这需要了解很多知识,例如C语言,JAVA语言&#xff0c…

多尺度样本熵

多尺度样本熵及其MATLAB实现方法 随着人们对信号处理技术的不断深入研究和发展,在信号非线性、非高斯的情况下,熵的概念成为一种很重要的测量信号复杂度的度量方式。多尺度熵是指在多个尺度范围内测量信号复杂度的一种方法。本文将介绍多尺度样本熵的概…