H5W3
当前位置:H5W3 > 问答 > 正文

我通过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系统的哪个目录里面放个脚本启动自己需要的服务,不知道行不行?

回答

额, 首先啊,不清楚你的 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来管理

未经允许不得转载:H5W3 » 我通过docker在ubuntu镜像的基础上创建了一个新的镜像,如何在每次启动该容器的时候自动启动里面的服务呢?

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址