【docker ros】docker 开启自启运行容器中的程序

2023-05-16

前言:

使用docker大规模部署应用,而又需要开机自启,自动启动容器中的程序,这里以docker ros为例子,使用systemctl服务,结合shell脚本,也可以结合Python脚本,进而实现了开机自启进入容器运行程序


步骤:

1、创建shell脚本

其目的是能够进入容器,并且能够执行相关程序

shell脚本示例  /home/a/test.sh

docker run -ti -d  \
--hostname=${USER}  \
--network=host \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw  \
--env="QT_X11_NO_MITSHM=1" \
-v /etc/localtime:/etc/localtime \
--name=myros  \
dockerros/my_ros:latest \
bash
  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • -v:绑定一个卷,即把本地文件映射到容器中

  • --name  为容器命名

  • -v /etc/localtime:/etc/localtime  这个解决了容器内时间和本地时间不一致的问题(时区不一致导致的)

2、编写systemctl脚本

示例 my_test.service

[Unit]
Description=my test
After=docker.target
 
[Service]
Type=simple
ExecStart=/home/a/test.sh 
PrivateTmp=true
KillMode=control-group

 
[Install]
WantedBy=multi-user.target

3、把service放到 /usr/lib/systemd/system/目录下

然后执行 

sudo systemctl daemon-reload

4、启动服务

启动服务只需要

sudo systemctl start  my_test.service

设置开机自启

sudo systemctl enable my_test.service

关闭开机自启

sudo systemctl disable my_test.service

查看my_test.service的实时输出

sudo journalctl -u my_test.service -f

注意事项

1、注意观察bash 的路径 是/usr/bin/bash 还是/bin/bash 本机、工控机、docker三个地方的可能不一样,写错误可能导致服务启动失败

2、容器在创建完成,shell脚本执行完成后,通过 

sudo systemctl status my_test.service

查看服务状态

 Active: inactive (dead)

这是因为在执行玩shell脚本后,执行完成,会退出,所以是Active: inactive (dead)

像docker.service会显示running,是因为它会一直运行

3、运行容器中的程序可以在docker run 最后的bash后面加上启动命令,也可以通过dockerfile CMD中指定,在用镜像创建容器时运行哪个程序

这里只做了开机自启,并没有涉及到stop和restart,在service文件里也没有写这两个命令,“ExecStop 和ExecReload”,这是因为“自启的时候在执行完成shell脚本后,执行完成,会退出”,系统会自己调用“ExecStop”,这里写的话会产生问题,而docker有自己的停止命令,停止可以用 docker stop 容器名实现,重启的话只需要再执行一下shell脚本即可。


如有问题请留言,看到会回复的!欢迎提出更好的思路,谢谢! 

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

【docker ros】docker 开启自启运行容器中的程序 的相关文章

随机推荐

  • VSCode 安装教程(超详细)

    文章目录 VSCode 安装使用教程 xff08 图文版 xff09 那么 xff0c 什么是 IDE 呢 xff1f 目前 xff0c 前端开发主流的 IDE 有以下 5 个下边我们开始玩转 VSCodeVSCode 下载 安装Windo
  • 没有为字符串添加终止符;初始化为‘\0‘

    使用VS2019遇到问题 1 没有为字符串添加终止符 19条消息 消除VS中C6054 可能没有为字符串 34 XXX 34 添加字符串零终止符的警告 wowpH的博客 CSDN博客 可能没有为字符串添加零终止符 2 char a 10 6
  • 安装vue-element-admin报错git clone --mirror -q git://github.com/adobe-webplatform/eve.git C:\Users\Admin

    问题描述 vue element admin项目 执行安装操作时 xff1a 安装依赖 npm install 建议不要直接使用cnpm安装依赖 xff0c 会出现bug xff0c 可以通过如下操作解决npm下载速度慢的问题 由于淘宝 N
  • 添加启动页

    添加启动页 2021 5 7 实验内容 1 为学号后一位同学编写一个简单app 新建一个emptyactivity 在layout的activity main xml中添加如下代码 span class token number 1 spa
  • Python求最大公约数和最小公倍数

    使用辗转相除法求得最大公约数 xff0c 再利用最大公约数求得最小公倍数 辗转相除法求最大公约数 def gcd num1 num2 if num1 num2 61 61 0 return num2 else num1 num2 61 nu
  • matlab实现梯度下降法

    前记 xff1a 大三上学期学了 运筹学 课程 xff0c 里面包含了许多算法和模型 模型就是线性规划及线性规划的对偶理论 xff0c 单纯形法以及它的实际应用 xff1b 整数规划及其解法 xff08 分支定界法 割平面法匈牙利算法 xf
  • 互斥锁、条件变量、信号量浅析

    互斥锁 条件变量 信号量浅析 互斥锁与条件变量 条件变量是为了保证同步 条件变量用在多线程多任务同步的 xff0c 一个线程完成了某一个动作就通过条件变量告诉别的线程 xff0c 别的线程再进行某些动作 xff08 大家都在semtake的
  • Linux中的tty、pts、pty等概念辨析

    Linux中的tty pts pty等概念辨析 基本概念 tty pty pts ptmx tty xff08 终端设备的统称 xff09 xff1a tty一词源于Teletypes xff0c 或teletypewriters xff0
  • 树莓派4B (aarch64) 安装PyTorch 1.8 的可行方案

    树莓派4B aarch64 安装PyTorch 1 8 的可行方案 最终可行方案 试了一堆方案 xff08 源码编译 Fast ai的安装文件等 xff09 之后 xff0c 终于找到一个可行的方案 是在 PyTorch 官方讨论社区的一个
  • Nvidia CUDA初级教程1 CPU体系架构综述

    Nvidia CUDA初级教程1 CPU体系架构综述 视频 xff1a https www bilibili com video BV1kx411m7Fk p 61 2 讲师 xff1a 周斌 本节内容 xff1a 了解现代CPU的架构和性
  • 解决VNC远程连接树莓派,窗口显示不全的问题

    1 vnc连接 xff0c sudo raspi config中7 A5选分辨率就好 或2 通过SSH命令行的方式连接树莓派 xff0c 在命令行输入 xff1a vncserver geometry 1080x1024
  • qt官网下载指导(新手易犯错误)

    一 获取资源 注意这里不要直接百度qt的官网 xff0c 如果直接百度下载会让你注册一个qt的账号 xff0c 并且一般没人下载最新版的qt6 当然也可以下载旧的版本 xff0c 但是由于本人比较愚笨 xff0c 还没有在官网找到qt旧版本
  • AI智能呼叫中心系统,主要应用场景有哪些?

    互联网智能时代 xff0c 销售人员不再每天拨打数百个电话 xff0c 当前呼叫中心电话系统被企业常用在电销行业 金融行业 保险 贷款催收行业等外呼销售行业 由传统的呼叫中心基础上不断的进行升级和改善 xff0c 逐渐演变为人工智能电话外呼
  • ROS:geometry_msgs中 Point32 , Point ,PointStamped 的定义和转换

    ROS geometry msgs中Point32 Point PointStamped 的定义和转换 Point32和Point的定义Point32和Point的转换PointStamped 的定义和转换 本文所用ROS为kinetic版
  • ROS:回调函数不执行

    最近在写一个接收图片消息的节点时 xff0c 遇到了两次回调函数不调用的情况 xff0c 记录一下 循环中有continue被跳过了 具体代码如下 xff1a while ros ok if mat data 61 61 nullptr s
  • Python猜拳游戏

    关键点在于 user input 43 1 3与computer input的值进行比较 xff0c 这样就省掉了对于边界值0和2的单独判断 xff0c 简化了代码 from random import choice def finger
  • ROS:节点发布消息无对应话题名称

    最近在写一个发布里程的节点的时候遇到了 xff0c 发布了消息 xff0c 在ros却没有对应话题情况 通过rostopic list 和 rosnode info 节点名 命令查看 xff0c 均没有对应话题 xff0c 大致代码如下 x
  • 【python安全攻防】python简易端口扫描器

    文章目录 socket套接字optparse模块socket解析主机进行连接获取bannerthreading多线程端口扫描器python nmap端口扫描 对自己看python绝技的一次学习记录 socket套接字 与TCP端口进行交互
  • ROS中geometry_msgs常用消息类型

    官方文档 xff1a geometry msgs Msg Srv Documentation geometry msgs里面所有的消息数据类型 xff1a 节点之间仅支持使用消息通讯 Accel AccelStamped AccelWith
  • 【docker ros】docker 开启自启运行容器中的程序

    前言 xff1a 使用docker大规模部署应用 xff0c 而又需要开机自启 xff0c 自动启动容器中的程序 xff0c 这里以docker ros为例子 xff0c 使用systemctl服务 xff0c 结合shell脚本 xff0