我有一个Dockerfile来在容器中安装MySQL server,然后我这样开始:
sudo docker run -t -i 09d18b9a12be /bin/bash
但MySQL服务不会自动启动,我必须手动运行(从容器内):
service mysql start
如何在运行docker容器时自动启动MySQL服务?
在DockerFile
中,在最后一行添加
ENTRYPOINT service ssh restart && bash
这对我有用
而这就是结果:
root@ubuntu:/home/vagrant/docker/add# docker run -i -t ubuntu
* Restarting OpenBSD Secure Shell server sshd [ OK ]
root@dccc354e422e:~# service ssh status
* sshd is running
首先,您的DockerFile
中有一个问题:
RUN service mysql restart && /tmp/setup.sh
Docker映像不保存正在运行的进程。因此,run
命令仅在Docker build
阶段执行,并在生成完成后停止。相反,您需要在容器启动时使用cmd
或entrypoint
命令指定该命令,如下所示:
CMD mysql start
其次,docker容器需要一个进程(最后一个命令)来保持运行,否则容器将退出/停止。因此,不能在DockerFile中直接使用普通的service mysql start
命令。
保持流程运行有三种典型的方法:
>
使用service
命令并在后面附加非结束命令,类似于tail-f
CMD service mysql start && tail -F /var/log/mysql/error.log
当您运行一个服务时,这通常是首选的,因为它使Docker可以访问输出的日志。
>
或使用前景命令执行此操作
CMD /usr/bin/mysqld_safe
这只在有类似mysqld_safe
的脚本时才起作用。
>
或将脚本包装到start.sh
中,并将其放入结尾
CMD /start.sh
如果命令必须执行一系列步骤,/start.sh
应该继续运行,则最好是这样。
对于初学者,不建议使用supervisord
。老实说,这是矫枉过正。对容器使用单个服务/单个命令要好得多。
顺便说一句:请查看https://registry.hub.docker.com查看现有的mysql docker映像以供参考
问题内容: 我有一个Dockerfile将MySQL服务器安装在一个容器中,然后我开始像这样: 但是MySQL服务不会自动启动,我必须手动运行(从容器内部): 运行docker容器时如何自动启动MySQL服务? 问题答案: 首先,有一个 问题, 在您的: Docker映像不会保存正在运行的进程。因此,您的命令仅在阶段执行,并在构建完成后停止。相反,您需要使用或如下所示的命令在启动容器时指定命令:
问题内容: 我正在使用Search Guard插件来保护由多个节点组成的elasticsearch集群。这是我的Dockerfile: 初始化SearchGuard(创建内部用户并分配角色)。容器启动后,我需要运行脚本。这是问题所在:除非运行Elasticsearch,否则脚本将不会初始化任何安全性索引。 脚本的内容是: 现在,我只是在容器启动后手动运行脚本,但是由于我是在Kubernetes上运
问题内容: 我看过很多教程似乎都在做我想做的事情,但是由于某种原因,我的Docker容器退出了。基本上,我正在Docker容器内设置一个Web服务器和一些守护程序。我通过bash脚本(在Dockerfile中通过CMD运行)完成了最后部分。看起来像这样: 然后在Dockerfile中启动它,如下所示: 我可以看到,当我手动运行事物时(即使用-i -t / bin / bash进入映像),所有服务都
问题内容: 假设我有一个要运行的Docker容器,那么我可以调用 一切都很好。如果系统崩溃并重新启动,是否有内置的方式来运行容器,使其能够自动重新启动? 如果是这样,这在Docker Compose中也可用吗? 问题答案: 是的,docker具有重启策略,该策略可以处理此问题。这也可以在compose.yml配置文件中找到。
假设我有一个要运行的Docker容器,然后我可以调用 一切都很好。是否有一种内置方法可以运行容器,以便在系统崩溃并重新启动时自动重新启动容器? 如果是这样,这在 Docker Compose 中是否也可用?
我见过一堆教程,它们似乎做了与我想做的相同的事情,但由于某种原因,我的Docker容器退出了。基本上,我在Docker容器中设置了一个Web服务器和几个守护进程。我通过一个名为的bash脚本来完成这一过程的最后部分,该脚本通过DockerFile中的CMD运行。如下所示: 我在Dockerfile中启动它,如下所示: 我可以看到,当我手动运行事情时(即使用-i-t/bin/bash进入映像),所有