docker 镜像不用 systemd 怎么自启服务

2020-12-17 14:38:10 +08:00
 onice

在没有 docker 的时候,我们自启服务通常是 systemctl enable 服务名 但 docker 镜像里面不能用 systemctl 这个命令。 那么运行在 docker 中的服务怎么自启呢?是使用 /etc/rc.d/rc.local 吗?

但这样也有问题,有些服务必须要使用 systemctl 。特别是通过源安装的应用,比如 mysql 这类服务。

求大佬解答疑惑?

1617 次点击
所在节点    Docker
7 条回复
CallMeReznov
2020-12-17 14:40:21 +08:00
restart=always
ss098
2020-12-17 14:40:54 +08:00
--restart always
6IbA2bj5ip3tK49j
2020-12-17 14:42:56 +08:00
如果你是要自启动容器,那就是让 docker 自启动,按照楼上的做法,把容器实例设置为 restart always 。
如果你是要启动容器的时候,让容器内部的某个服务自启动,那你应该是在以错误的方式使用容器。
boris93
2020-12-17 14:49:56 +08:00
如果你使用的是 MySQL 官方镜像,那么在容器角度来看,MySQL 是容器启动后一直在运行的,不需要用 systemctl
如果你是把应用和数据库等等一堆东西放在一个镜像里,那这就是你的姿势不对了
yyfearth
2020-12-17 16:06:08 +08:00
你把运行 docker 镜像当作一个单进程就好
就算是多进程的服务 也应该只跑单个服务

如果你把 docker 当作虚拟机
跑主进程后面一堆后台服务 比如一个容器内跑全套 nginx + web + db 这就是用法不对了
应该每个服务作为一个容器然后互相连起来用
onice
2020-12-17 16:11:44 +08:00
@yyfearth 明白了,感谢指点。
yyfearth
2020-12-17 17:30:04 +08:00
@onice 当然 如果只是本地开发做做实验或者测试
你可以把多个服务或者进程跑在一个容器里面 shell 进去直接后台跑起来 也不需要 systemd 之类的
用完就停掉就是

生产线上面 一定要保证单个服务 这样如果一个服务意外退出了 只需要让 docker 重启就好
如果多个服务 其中一个挂掉 一般情况下 docker 不会重启 那么你就惨了

其实容器相当于一个自带系统依赖的进程沙盒环境

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

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

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

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

© 2021 V2EX