Docker容器启动时运行 sh 脚本

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

systemctl enable 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 

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

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

需要注意的是:

  • PATH 是 docker 中的绝对路径

脚本(如script.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 exec -itd docker_name /bin/bash PATH/1.sh

使用 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?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171836840916800222838180%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171836840916800222838180&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-22-127028823-null-null.nonecase&utm_term=docker%E3%80%81%E5%A5%BD%E7%94%A8

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享