docker 镜像如何让启动的时候不执行 shell 脚本

2020-02-19 18:40:28 +08:00
 334862132
我有一个镜像,因为业务变动需要迁移,但是这个镜像打包后在新服务器上启动后会自动启动一个 shell 脚本 脚本启动失败了容器就自动关闭了,有没有什么办法能让 docker 容器在启动后不执行 shell 脚本


docker ps -a 里面 容器 写着 COMMAND sh /var/www/app/run.sh 就是开启容器后自动执行这个脚本
我尝试修改 config.v2.json 文件里面把 "Args":["/var/www/app/run.sh"], "Cmd":["sh","/var/www/app/run.sh"]俩个都删掉
之后 hostconfig.json 文件 "Name": "no",改成 always
没有用,启动后依然执行 shell 脚本,并且在执行后 config.v2.json 和 hostconfig.json 俩个文件又恢复成原来的样子
4545 次点击
所在节点    Docker
6 条回复
d5
2020-02-19 18:46:01 +08:00
可以停止容器后,直接 /var/lib/docker/<容器卷 id>进去找到最新可写层那个文件夹,进去改。
334862132
2020-02-19 19:12:29 +08:00
@d5 我改的就是这个
容器卷里面有这些文件
checkpoints config.v2.json hostconfig.json hostname hosts resolv.conf resolv.conf.hash secrets shm
过去改映射端口时候改 hostconfig.json config.v2.json 俩个文件把映射端口改一下就行了,但是现在的启动项在
config.v2.json 文件面 有 "Args":["/var/www/app/run.sh"], "Cmd":["sh","/var/www/app/run.sh"] 俩个内容是关于 shell 脚本的 我都删了后 重新启动容器依然在执行 shell 脚本..
然后回去再打开一下 config.v2.json 文件 发现删掉的文件又还原了
这一排里面所有的文件我都看了 没找到其他地方还有写这脚本的地方
iUnix
2020-02-19 19:15:32 +08:00
为什么不重新 build ?
不重新 build 的话指定运行的 command 就行了
singerll
2020-02-19 19:16:10 +08:00
把脚本内容改了试试?
334862132
2020-02-19 19:27:07 +08:00
@singerll
谢了,我当时也是这想法,实在不行重搭一个 反正代码都有就是从配环境麻烦点
不过刚我把容器删了 之后用镜像启动位置用 /bin/sh 启动后就不自动执行脚本了 上一次构建容器时候用的 /bin/bash
没想到这玩意还有影响....
aaronchen2016
2020-02-20 13:10:45 +08:00
外挂 volume 将那几个脚本覆盖

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/645906

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX