首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何防止docker容器在执行sh脚本文件后停止

为了防止Docker容器在执行sh脚本文件后停止,可以采取以下几个措施:

  1. 使用无限循环:在sh脚本文件的最后添加一个无限循环,确保容器不会停止。例如,可以使用以下命令:
代码语言:txt
复制
while true; do sleep 1; done

这将使容器持续运行,直到手动停止。

  1. 使用交互式容器:在运行容器时,使用-it参数创建一个交互式终端。这样,当脚本执行完毕后,容器将保持运行状态,而不会自动停止。例如:
代码语言:txt
复制
docker run -it <image_name> sh
  1. 使用守护进程:在sh脚本文件中启动一个守护进程,以保持容器的运行。守护进程可以是一个无限循环、一个长期运行的服务或者一个监控进程。例如,可以使用以下命令启动一个守护进程:
代码语言:txt
复制
nohup sh -c "your_script.sh && while true; do sleep 1; done" &

这将在执行完脚本后启动一个无限循环,确保容器持续运行。

  1. 使用Docker Compose:如果您使用Docker Compose来管理容器,可以在docker-compose.yml文件中设置restart选项为always,以确保容器在停止后自动重新启动。例如:
代码语言:txt
复制
services:
  your_service:
    restart: always

这将使容器在停止后自动重新启动。

以上是几种常见的防止Docker容器在执行sh脚本文件后停止的方法。根据具体情况选择适合的方法,并确保您的脚本文件和容器配置正确无误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

docker容器中使用非root用户执行脚本 (

应用容器化之后,docker容器启动时,默认使用的是root用户执行命令,因此容器中的应用默认都是使用root用户来运行的,存在很高的安全风险,那么如何能够使用非root的业务用户来运行应用呢,下面我将举一个简单的例子来说明...该例子是容器中使用自建的用户来运行一个简单的shell脚本,并将脚本输出日志持久到容器外部。接下来让我们来看从制作镜像到容器运行的全过程吧。.../test.sh" --使用所创建的用户来运行脚本 [root@host09 test]# 脚本内容如下: [root@host09 test]# cat test.sh while [ 1...= 1 ] do echo `id` >>/data/logs/hpf.log  --将日志输出到文件,启动容器的时候做持久化 sleep 1 done [root@host09 test]...: 注意,启动容器之前,需要将宿主机上/data/hepf/log目录的权限,否则容器启动时,脚本中的日志将没有权限写该目录,我直接将该目录权限修改成777了。

2.1K10

docker mysql 容器执行mysql脚本文件并解决乱码

docker 容器执行mysql脚本文件并解决乱码 网上搜索了一大推,容器mysql中执行一段代码这么难吗?搞得十分复杂。 于是自己记录一下,虽然简单,但是还是怕后面忘记掉,又搜大半天。...注意mysqldocker容器中,如果你只导入到宿主机,然后进入容器执行sql文件的话,一定会告诉你是打不开的,因为宿主机外部和容器内部是相对隔离的,不可能在容器内部去找宿主机的路径。...docker ps 然后我们通过id 去指定容器,这个也就是mysql容器的id 我们通过这个命令就可以进去到容器,我们进去到这里呢,句可以在这里去登录mysql,然后执行脚本。...docker cp /mysql/mysql/1.sql 4f50fbeb15ee:/home/1.sql cp后面是你宿主机sql文件所在的路径,容器id后面一个是容器home文件夹,一个是我拷贝命名的...有的 容器执行,就用容器中的路径,和宿主机路径无关。

2.2K30
  • docker mysql 容器执行mysql脚本文件解决远程访问权限问题并解决乱码

    docker 容器执行mysql脚本文件并解决乱码及解决远程访问权限。 网上搜索了一大推,容器mysql中执行一段代码这么难吗?搞得十分复杂。...现在的需求是将我的sql文件导入进来,然后让docker中的mysql 来执行它。...注意mysqldocker容器中,如果你只导入到宿主机,然后进入容器执行sql文件的话,一定会告诉你是打不开的,因为宿主机外部和容器内部是相对隔离的,不可能在容器内部去找宿主机的路径。...docker ps 然后我们通过id 去指定容器,这个也就是mysql容器的id 我们通过这个命令就可以进去到容器,我们进去到这里呢,句可以在这里去登录mysql,然后执行脚本。...docker cp /mysql/mysql/1.sql 4f50fbeb15ee:/home/1.sql cp后面是你宿主机sql文件所在的路径,容器id后面一个是容器home文件夹,一个是我拷贝命名的

    1.8K40

    为bookstack制作docker image

    本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/article/bookstack_docker/ 前言 制作docker image 下载二进制程序 二进制版本发布页同时下载二进制文件和源代码...而制作容器时的CMD命令不能有分号;,这意味着我们不能在一行中执行两条命令。 所以新建run.sh脚本,在其中调用generate_conf.sh生成配置文件,然后运行....制作停止脚本 这里我们给容器进行了命名,如果停止不删除,会影响下次使用。使用一个简单的脚本简化操作。 ./install.sh 测试 执行安装命令 ..../install.sh 观察到设置数据库的过程 执行运行命令 ./run.sh 打开浏览器,localhost:8181可以看到bookstack界面,用户名和密码都是admin....TODO 增加一些脚本示意 将docker上传到docker hub和github 给环境变量增加更多选项 增加mysql容器部分 增加mysql容器中文显示的链接使用mysql workbench发现如何初始化时指定了字符集

    91120

    容器应用优雅关闭的终极大招

    优雅停机是指在停止应用时,执行的一系列保证应用正常关闭的操作。...现状分析 现阶段,业务容器业务启动是通过 shell 脚本启动业务,对应的容器内 PID 为 1 的进程为 shell 进程但 shell 程序不转发 signals,也不响应退出信号。...所以容器应用中如果应用容器中启动 shell,占据了 pid=1 的位置,那么就无法接收 k8s 发送的 SIGTERM 信号,只能等超时被强行杀死了。...执行清理... 退出完成... 可以看见执行了 Prestop 脚本进行优雅关闭。同样的可以将 yaml 文件中的 Prestop 脚本取消进行对比测试可以发现就会进行强制删除。...方案二:shell 脚本修改为 exec 执行 修改start.sh脚本 #!/bin/sh exec .

    2.7K41

    Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器

    ---容器启动脚本 以下是 mysql 容器的启动脚本: #!...创建 redis 容器 使用 redis 缓存后端数据。 redis 容器不需要特别的处理。 ├── redis │ └── start.sh 启动脚本: #!...通过 –link 选项来建立容器间连接,不但可以避免容器的 IP 和端口暴露到外网所导致的安全问题,还可以防止容器重启 IP 地址变化导致的访问失效,它的原理类似于 DNS 服务器的域名和地址映射。...启动容器栈 为了方便测试,每个需要创建的容器下面都会有一个启动脚本,并且有一个控制所有容器的启动脚本停止脚本: #!.../start.sh [image.png] 然后进入到 mysql 容器中将 django 数据库文件导入: # docker inspect --format "{{.State.Pid}}"

    9.3K20

    Docker三剑客之docker-compose

    项目 (project):由一组关联的应用容器组成的一个完整业务单元, docker-compose.yml 文件中定义。...服务容器一旦构建,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。 可以随时项目目录下运行 docker-compose build 来重新构建服务。...删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。 选项: -f, --force 强制直接删除,包括非停止状态的容器。一般尽量不要使用该选项。...bash脚本的用途是分别执行几个module下的Dockerfile文件,分别打成镜像,不用一个个手工执行文件如下: buildDockerImage.sh: #!...执行sh buildDockerImage.sh命令,执行完,使用docker images 查看镜像。

    1.2K40

    Docker使用笔记

    和test_rule_checker三个文件夹中的main.py,每个python脚本执行记录都写到日志文件中,且每个程序保持在后台运行 5、使用start.sh作为docker的启动命令 混元的返回是...main.py,每个python脚本执行记录都写到日志文件中,且每个程序保持在后台运行 RUN echo '#!...启动,可以通过下面的命令来判断当前容器的运行情况: sudo docker ps -a 返回的格式如下: 建议使用ps -a而不是ps,使用ps -a能够看到全量的包括历史上运行已经停止了的容器的情况...进入到容器,可以像在本地的系统一样进行调试,可以通过启动脚本或者其他命令来查看我们想要执行的命令是否正确。...提交成功,再push到镜像仓库中。 3.8 删除容器 3.3中提到了如何启动容器3.4中提到了如何进入到容器中。

    24910

    docker-compose下的java应用启动顺序两部曲之二:实战

    什么是wait-for-it.sh wait-for-it.sh脚本用来访问指定的地址和端口,如果收不到响应就等待一段时间再去重试,直到收到响应,再去做前面指定好的命令,如上图红框所示....这样我们docker-compose.yml中用command参数来设置service容器的启动命令,就可以把wait-for-it.sh脚本用上了 c....' depends_on: - eureka 注意command参数的内容,如下,service容器创建,会一直等待eureka:8080的响应,直到该地址有响应,才会执行命令java...,可以开始验证了; 启动容器,验证顺序控制是否成功 docker-compose.yml文件所在目录执行命令docker-compose up,会创建两个容器,并且日志信息会直接打印控制台,我们来分析这些日志信息...00:00:00 ps -ef 通常情况下,执行命令docker stop xxx停止容器时,只有PID=1的进程才会收到"SIGTERM"信号量,所以使用docker stop停止容器时,eureka

    78420

    Graboid蠕虫分析

    该映像包含用于与其他Docker主机进行通信的Docker客户端工具。 2、容器中的入口点脚本/ var / sbin / bash从C2下载4个shell脚本,并一一执行。...5、cleanxmr.sh从IP文件中随机选择一个易受攻击的主机,然后停止目标上的cryptojacking容器。...cleanxmr.sh不仅会停止蠕虫部署的密码劫持容(gakeaws / nginx),而且还会停止其他基于xmrig正在运行的容器。...每个受感染的主机上定期重复执行步骤1至步骤6。已知的刷新间隔为100秒。启动pocosow / centos容器,shell脚本和IP文件都会从C2下载。 ?...只有下载并执行程序脚本,才能知道pocosow / centos的恶意意图。但是,可以很容易地从其构建历史中发现gakeaws / nginx的恶意意图。

    97840

    配置云服务器开机自动化脚本

    ​需求分析云服务器有两个 docker 容器,由于服务器会停机,需要在开机的时候能够自动启动;服务器停机,可能导致公网 ip 改变,其中一个容器是源码部署,需要配置连接宿主机即服务器上的 MySQL 服务...,所以配置文件中 MySQL 的 ip 的值需要填入每次开机的实际公网 ip;停机或重启前,执行停机服务,优雅地停止 docker,最后再停机。...解决方案针对需求 a、c,需要注册两个 service 服务,创建 systemd 服务单元文件,放入到/etc/systemd/system/,分别为start.service、stop-docker.service...,这个两个服务分别在服务器启动、停机前自动执行;上述两个服务,执行特定的脚本,start.service执行的是start.sh,stop-docker.service执行stop.shstart.sh...中,首先获取当前服务器的公网 ip,然后替换掉配置文件中的变量 HOST_IP,最后启动两个容器 stop.sh 中,停止所有正在运行的容器

    11710

    Fedora中如何授予权限给用户使用Docker

    邮件列表,有人问有关描述了如何将用户添加到Docker组的Fedora文档。...此外,由于Docker运行asdocker_t,SELinux的防止全密闭域连接到此docker.sock。 从Docker无授权控制 Docker目前没有任何授权控制。...如果你可以跟docker插座或Docker监听网络端口上,你可以谈论它,你可以执行所有Docker命令。 例如,如果我添加“dwalsh”的Docker组我的机器上,我可以执行。...Docker,让管理员可以配置哪些命令,你会允许用户执行,以及容器中,你可能会允许他们开始/停止。...首先消除执行Docker运行--privileged或Docker运行--cap,删除是正确的方向迈出了一步的能力。但是,如果你看过我的其他职位,你知道,需要更多的工作要做,以使容器中包含。

    1.3K20

    手把手教你制作漏洞复现环境

    容器可以被创建、启动、停止、删除、暂停等. 容器的实质是进程, 但与直接在宿主执行的进程不同, 容器进程运行于属于自己的独立的命名空间。...Docker CE 官方为了简化安装流, 提供了一套便捷的安装脚本, Debian 系统上可以使用这套脚本安装: $ curl -fsSL get.docker.com -o get-docker.sh...or $ sudo sh get-docker.sh --mirror Aliyun 执行这个命令,脚本就会自动的将 最新版 Docker CE 安装至系统....FROM : 用于指定基础镜像, 这里用的是 nginx RUN : 用于容器中运行交互 shell 指令, 此处是用一段字符串替换默认的 index.html 文件内容 Dockerfile 所在文件目录执行构造镜像指令...运行 $ docker-compose up -d 指令, 会拉取文档内指定镜像并且运行容器. up 指令用于创建并启动容器, 为防止容器启动, 有服务在前台运行造成交互操作中断, 通常配合 -d

    2.1K11

    Asp.NetCore轻松学-使用Docker进行容器化托管

    ,hellow-world 执行输出信息红框 2 处,表示您安装的 docker 程序已经安装成功并成功使用容器运行。..."] #运行镜像入口命令和可执行文件名称 3.2 构建镜像 创建完 Dockerfile 文件,将项目文件 copy 到服务器上,定位到目录 Deploye.Linux ,执行以下命令 sudo docker...,当后续引入 Jenkins 进行自动化构建之后,我们直接把该脚本迁移到 Jenkins 中即可,还是以当前的实例 Deploy.Linux 为例子,编写 demo.sh 脚本文件如下: sudo docker...好了,现在可以愉快的执行脚本了,使用下面的命令执行一键构建镜像 sudo sh demo.sh ?...文件 3、容器中构建 .NET Core 程序 4、编写自动化构建脚本,为迁移到 Jenkins 做准备 5、学习了一些基本的 docker 扩展命令

    90640

    Centos7 下载安装配置Jenkins教程

    容器方式 第三种通过包管理器方式安装 1.2.1 直接下载war包方式进行安装配置Jenkins 接下来我们讲解下如何使用下载war 包方式进行安装和配置Jenkins....具体步骤如下: 点击下载最新稳定版Jenkins 输入如下命令运行Jenkins java -jar jenkins.war --httpPort=8080 或者可以编写一个Shell脚本: 创建一个文件输入...我们可以看到如下内容: 1.2.2 Docker 方式安装Jenkins Docker 方式安装首先需要安装Docker 环境,具体安装方法见我的另外一篇博文:如何在Centos7上安装或卸载...值得注意的是当我们打开这个你会发现有这么一句话: 翻译成中文就是: 不推荐使用此image,而应使用Jenkins社区项目发布过程中提供和维护的jenkins / jenkins:lts...jenkins/jenkins:lts 这将会自动创建jenkins_home 文件夹,它将在容器停止/重新启动/删除后继续存在。

    93530

    为了实现CICD,先来定制一个Docker镜像【实战精华篇】

    因此,为配合CI/CD操作,需要先针对项目构建一些发布的脚本,通过脚本来自动化操作Docker镜像定制、Docker的启动和停止。...这篇文章就配合具体的实践案例来为大家讲讲如何定制一个Docker镜像,并通过脚本执行镜像的构建、项目的发布、容器的启动与停止等。 什么是Dockerfile?...这里为了方便CI/CD操作,我们可以通过脚本来完成整个容器停止容器移除、镜像的移除、镜像的重新制作以及容器的重新启动,这样CI/CD的系统只用调用对应的脚本即可。...示例脚本start.sh如下: #!/bin/bash # 停止容器 docker stop channel echo "停止容器success!"...小结 本文带大家以具体的实例演示了如何制作Docker镜像,制作Docker镜像过程中需要注意的事项,以及制作之后用于CI/CD的脚本编写。

    53420

    Docker 容器中捕获信号

    我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程。...这些操作的本质都是通过从主机向容器发送信号实现主机与容器中程序的交互。比如我们可以向容器中的应用发送一个重新加载信号,容器中的应用程序接到信号执行相应的处理程序完成重新加载配置文件的任务。...当一个信号被发送给一个进程,进程会立即中断当前的执行流并开始执行信号的处理程序。如果没有为这个信号指定处理程序,就执行默认的处理程序。...,执行命令: $ docker container kill --signal="SIGTERM" my-app 此时应用会以我们期望的方式退出: 应用程序不是容器中的 1 号进程 创建一个启动应用程序的脚本文件...脚本中捕获信号 创建另外一个启动应用程序的脚本文件 app2.sh,内容如下: #!

    2.7K20

    使用Docker部署Hadoop集群

    执行完成,可以镜像列表中看到 $ docker images 构建Hadoop镜像 上面是运行了3个centos容器,需要在每个容器中单独安装Hadoop环境,我们可以像构建SSH镜像一样,构建一个...docker中直接修改/etc/hosts文件重启容器后会被重置、覆盖。...因此需要通过容器启动脚本docker run的--add-host参数将主机和ip地址的对应关系传入,容器启动后会写入hosts文件中。...如: a、停止容器 docker stop hadoop2 b、保存镜像 docker commit hadoop2 hadoop_me:v1.0 测试 1、端口映射 集群启动,需要通过web界面观察集群的运行情况.../local 4.master主机上执行start-all.sh脚本启动集群 5.通过web页面访问 image.png image.png image.png

    81320
    领券