我通过docker在ubuntu镜像的基础上创建了一个新的镜像,如何在每次启动该容器的时候自动启动里面的服务呢?

发布于 2022-09-12 13:14:27 字数 555 浏览 28 评论 0

我在docker里在ubuntu(18.04版本)镜像的基础上安装了nginx,mysql,php,创建了一个新的镜像,请问如何在每次启动该容器的时候自动启动里面的服务呢?

现在的状况是我每次以下面的命令进去:

docker run -it -p 8009:80 -v /home/yhm:/var/www/html myserver:1.13 /bin/bash

进去后我还得一个一个手动的启动各个服务,请问如何配置才能让我一进去这些服务就自启动了呢?我按网上说的在 /etc/rc.local里面加上了(并且该文件对所有用户也都加上了可执行权限):

service nginx start
service mysql start
service php7.4-fpm start

但是不起作用

我是刚开始学习docker的菜鸟,目前这个新镜像不是通过dockerfile创建的,是通过在容器里面改东西然后commit创建出来的,所以各位大神不要回答说在dockerfile里面执行啥命令哈,谢谢了。

我想的是容器启动的时候在ubuntu系统的哪个目录里面放个脚本启动自己需要的服务,不知道行不行?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情深缘浅 2022-09-19 13:14:27

额, 首先啊,不清楚你的 ubuntu 是啥版本的. 怎么还在用 service 命令启动服务呢?你用的是比较老的版本么? 我记得好几年前的 ubuntu 都已经是 systemd了.启动服务应该是 systemctl start ...了. 另外.不管是 systemd 还是 init.d ,你想通过这个命令启动服务,你要安装对应的服务启停脚本啊. deb 大部分会自动安装这个服务脚本,你要要验证下这个命令能不能启动啊..

然后才是开机运行的,有好几种方式可以设置, 首先 在服务里设置开机启动, systemctl enable ..., init.d 的我忘记是啥了. 或者 /etc/rc.d/rc.local 或者在 crontab 里使用 @reboot ...... 等方式都可以,前提是你的脚本真的能启动服务..

养猫人 2022-09-19 13:14:27

既然用了docker建议还是用dockerfile来编写比较好,你这样直接run,而且后面的/bin/bash 其实就是启动时指定的命令,你指定的的命令并没有去启动的你的服务,只是启动了一个bash环境, 肯定是启动不起来你的服务的,正确的用法应该是你编写启动的shell脚本,在dockerfile中使用CMD或者ENTRYPOINT来指定启动的服务,如果容器需要多个进程可以使用supervisord来管理

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文