如何解决docker 执行exec报错问题

藏色散人
Lepaskan: 2022-01-12 14:12:37
asal
8468 orang telah melayarinya

docker执行exec报错的解决办法:1、把脚本中的第一行用“/bin/bash”替换;2、执行“docker exec -d service_name /bin/bash -c '/opt/start.sh'”。

如何解决docker 执行exec报错问题

本文操作环境:centos7系统、Docker 20.10.11版本、Dell G3电脑。

docker exec 执行脚本失败解决方法

背景介绍

docker容器里有一个脚本,需要在使用的时候在后台运行,但是通过docker exec 调用这个脚本却一直得不到想要的结果,于是开始了探究之路!

原始脚本

docker exec -it service_name /bin/bash -c '/opt/start.sh'
Salin selepas log masuk

这个start.sh的作用就是在后台启动两个服务

#!/bash
nohup start1.sh > start1.log 2>&1 &
sleep 5
nohup start2.sh 2>&1 &
echo 'server started'
Salin selepas log masuk

问题定位

1. 脚本书写不规范

从上述的命令中可以看到docker 启动的时候用的式/bin/bash 而脚本中指定的确实/bash.我们都知道脚本第一行的内容指定了shell脚本解释器的路径,而且这个指定路径只能放在文件的第一行。因此需要把脚本中的第一行用/bin/bash替换了,使得它们用同一个解释器

2.启动参数有问题

docker exec 执行的过程中使用了-it这个参数,在这里插入图片描述

  • -t让docker分配一个伪终端并绑定到容器的标准输入上
  • -i则让容器的标准输入保持打开.

这样执行完后台脚本只能云行第一个start.sh, 第二个并不能起作用,因为执行完了终端也退出了,

看到help 中, 有一个-d, 后台云行脚本, 这一条刚好符合我们的要求

修改过程

docker exec -d service_name /bin/bash -c '/opt/start.sh'
Salin selepas log masuk
#!/bin/bash
nohup start1.sh > start1.log 2>&1 &
sleep 5
nohup start2.sh 2>&1 &
echo 'server started'
Salin selepas log masuk

 推荐学习:《docker教程

Atas ialah kandungan terperinci 如何解决docker 执行exec报错问题. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!