我通过docker在ubuntu镜像的基础上创建了一个新的镜像,如何在每次启动该容器的时候自动启动里面的服务呢?
我在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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
额, 首先啊,不清楚你的 ubuntu 是啥版本的. 怎么还在用 service 命令启动服务呢?你用的是比较老的版本么? 我记得好几年前的 ubuntu 都已经是 systemd了.启动服务应该是 systemctl start ...了. 另外.不管是 systemd 还是 init.d ,你想通过这个命令启动服务,你要安装对应的服务启停脚本啊. deb 大部分会自动安装这个服务脚本,你要要验证下这个命令能不能启动啊..
然后才是开机运行的,有好几种方式可以设置, 首先 在服务里设置开机启动, systemctl enable ..., init.d 的我忘记是啥了. 或者 /etc/rc.d/rc.local 或者在 crontab 里使用 @reboot ...... 等方式都可以,前提是你的脚本真的能启动服务..
既然用了docker建议还是用dockerfile来编写比较好,你这样直接run,而且后面的/bin/bash 其实就是启动时指定的命令,你指定的的命令并没有去启动的你的服务,只是启动了一个bash环境, 肯定是启动不起来你的服务的,正确的用法应该是你编写启动的shell脚本,在dockerfile中使用CMD或者ENTRYPOINT来指定启动的服务,如果容器需要多个进程可以使用supervisord来管理