实现脚本自动部署docker

实现,脚本,自动,部署,docker · 浏览次数 : 0

小编点评

## 脚本内容: ```bash #!/bin/bash # 进入指定文件夹打包成imagecd docker ps | grep "mobile" | awk '{print $1}' | xargs docker stop docker rm m1 docker rm m2 docker rm m3 # 构建 Docker 镜像并获取其 ID IMAGE_ID=$(docker build -t xxx:Tag . -q) # 使用镜像 ID 运行 Docker 容器 docker run -d -p 0001:8080 --name mobile2 -v /opt/xx/:/opt/xx/ & docker run -d -p 0002:8080 --name mobile1 -v /opt/xx/:/opt/xx/ & docker run -d -p 0003:8080 --name mobile3 -v /opt/xx/:/opt/xx/ & # 退出所有容器 docker ps -a ``` ## 解决方案: 1. **权限问题:** 脚本需要具有写入 `/usr/local/bin/` 目录的权限才能执行。尝试使用 `sudo` 权限来更改权限。 2. **换行符问题:** 脚本中使用了 Windows 风格的换行符 `\\r`,而 Linux 使用的是 `\n`。由于脚本可能包含 Windows风格的换行符,导致解释器无法找到正确的路径。可以使用 `sed` 或 `dos2unix` 等工具进行换行符转换。 3. **退出容器问题:** 使用 `docker ps -a` 命令显示所有容器,并使用 `docker kill` 命令停止所有容器。 ## 总结: 该脚本通过自动构建 Docker 镜像并运行多个容器来实现多副本部署。由于权限问题、换行符问题和退出容器问题,需要分别进行解决方案。建议在运行脚本之前确保脚本具有写入 `/usr/local/bin/` 目录的权限,并确保脚本中使用的换行符符合 Linux 风格。

正文

前言:

  使用场景是 我这边的一个单体项目需要多一个多副本的部署方式,一直输入重复命令我实在是嫌烦了,使用写了一个脚本来一键更新部署上去。jar包都是我手动上传的,没有把包传入公网库里。

 之所以记录就是因为遇到了几个没有遇到过的问题记录以下。

 示例:

#!/bin/bash
# 进入指定文件夹打包成image
cd /soft/xx/xx/
# 停止和删除包含 "mobile" 在名称中的容器
docker ps | grep "mobile" | awk '{print $1}' | xargs docker stop
docker rm m1
docker rm m2
docker rm m3
# 构建 Docker 镜像并获取其 ID
IMAGE_ID=$(docker build -t xxx:Tag . -q)
# 使用镜像 ID 运行 Docker 容器
docker run -d -p 0001:8080 --name mobile2 -v /opt/xx/:/opt/xx/ $IMAGE_ID
docker run -d -p 0002:8080 --name mobile1 -v /opt/xx/:/opt/xx/ $IMAGE_ID
docker run -d -p 0003:8080 --name mobile3 -v /opt/xx/:/opt/xx/ $IMAGE_ID
 
省略每次输入 chmod +x script 这个命令,可以将脚本复制到一个在系统 PATH 中的目录中,这样就可以在任何地方执行它,而无需添加 ./ 前缀或手动更改权限。
可以将脚本复制到 /usr/local/bin/ 目录中:
 
sudo cp 脚本文件名 /usr/local/bin/
 
然后就可以在任何地方都只需要输入 脚本名称就可以执行。

错误一:-bash: /usr/local/bin/runpoject: Permission denied 没有权限的命令

这个错误是由于权限问题引起的,它表示你没有足够的权限来执行 /usr/local/bin/runpoject 脚本。这是因为 /usr/local/bin 目录通常需要超级用户权限才能写入。

你可以尝试以下步骤来解决这个问题:

使用尝试使用以下命令:

 sudo chmod +x /usr/local/bin/script

错误二:-bash: /usr/local/bin/runpoject: /bin/bash^M: bad interpreter: No such file or directory 转义符的原因
这个错误消息表明你的脚本文件包含了 Windows 风格的换行符(\r\n),而不是 Linux 风格的换行符(\n)。这种问题可能会导致解释器无法找到正确的路径。

要解决这个问题,你可以使用文本编辑器将脚本文件转换为 Linux 风格的换行符。

你可以使用 dos2unix 命令来进行转换,如果系统没有安装这个命令,可以尝试使用 sed 命令来进行转换,如下所示:

sed -i 's/\r$//' /usr/local/bin/script

亲测可以解决问题。

与实现脚本自动部署docker相似的内容:

实现脚本自动部署docker

前言: 使用场景是 我这边的一个单体项目需要多一个多副本的部署方式,一直输入重复命令我实在是嫌烦了,使用写了一个脚本来一键更新部署上去。jar包都是我手动上传的,没有把包传入公网库里。 之所以记录就是因为遇到了几个没有遇到过的问题记录以下。 示例: #!/bin/bash # 进入指定文件夹打包成i

[转帖]自动化配置SSH免密登录和取消SSH免密配置脚本

1. 前文 搭建了一套有多台主机的局域网环境,不完全考虑安全性的情况下,为方便管理局域网内主机,配置SSH免密登录,因主机较多,前阵子针对配置ssh免密和取消ssh免密功能单独写了脚本来自动化批量部署,现把两个功能封装在一起做成交互式程序 2.实现代码 #!/bin/bash #Author:cos

[转帖]acme.sh-实现自动化部署SSL证书

https://cloud.tencent.com/developer/article/2055254 前言 ; acme 我一直使用的都是Let's Encrypt免费的证书,昨天看到群里的大佬发出了一个测试的证书申请的脚本命令,我才接触到acme.sh,于是我查阅了很多大佬的博文了解这个脚本的使

[转帖]通过Shell脚本自动监控JAVA进程中线程cpu使用率

https://gitee.com/jialy/auto-monitor-java-process/tree/master 本文主要介绍在 show-busy-java-threads.sh 脚本的功能基础上,通过 process-cpu-monitor.sh 脚本实现Linux平台上Java进程或

用 Python 脚本实现电脑唤醒后自动拍照 截屏并发邮件通知

背景 背景是这样的, 我的家里台式机常年 休眠, 并配置了 Wake On Lan (WOL) 方便远程唤醒并使用. 但是我发现, 偶尔台式机会被其他情况唤醒, 这时候我并不知道, 结果白白运行了好几天, 浪费了很多电. 所以我的需求是这样的: 🤔 电脑唤醒后(可能是开机, 有可能是从休眠状态唤醒

[转帖]详解自动交互命令expect,免去手动输入!

https://zhuanlan.zhihu.com/p/192470248 #概述expect是一个用来实现自动交互功能的软件套件,是基于TCL的脚本编程工具语言,方便学习,功能强大 #扩展TCL:全拼为Tool Command Language ,是一种脚本语言,由John Ousterout创

[转帖]shell脚本使用expect自动化交互登录远程主机进行批量关机

前文 1.目标主机登录用户都为root,且密码一致 2.目标主机开放启动了SSH服务且22号端口可访问(防火墙未进行拦截) 软件介绍 expect Expect是一个用来实现自动和交互式任务进行通信的免费编程工具语言。由Don Libes在1990年开始编写。 结合Shell Script实现自动和

造个Python轮子,实现根据Excel生成Model和数据导入脚本

前言 最近遇到一个需求,有几十个Excel,每个的字段都不一样,然后都差不多是第一行是表头,后面几千上万的数据,需要把这些Excel中的数据全都加入某个已经上线的Django项目 这就需要每个Excel建个表,然后一个个导入了 这样的效率太低,不能忍 所以我造了个自动生成 Model 和导入脚本的轮

[转帖]echo 输出不换行-e \c

http://www.my889.com/i/1952 在shell中,echo输出会自动换行。有时候在循环中不希望echo输出换行。代码实现如下: 1 echo -e " \c" # -e 表示开启转义, \c表示不换行 脚本: 1 2 3 4 5 6 7 8 9 #!/bin/bash i=1

手把手教你在昇腾平台上搭建PyTorch训练环境

摘要:在昇腾平台上运行PyTorch业务时,需要搭建异构计算架构CANN软件开发环境,并安装PyTorch 框架,从而实现训练脚本的迁移、开发和调试。 本文分享自华为云社区《手把手教你在昇腾平台上搭建PyTorch训练环境》,作者:昇腾CANN。 PyTorch是业界流行的深度学习框架,用于开发深度