当前位置: 首页 > 知识库问答 >
问题:

运行docker容器时如何自动启动服务?

东方灵均
2023-03-14

我有一个Dockerfile来在容器中安装MySQL server,然后我这样开始:

sudo docker run -t -i 09d18b9a12be /bin/bash

但MySQL服务不会自动启动,我必须手动运行(从容器内):

service mysql start

如何在运行docker容器时自动启动MySQL服务?

共有2个答案

高展
2023-03-14

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
公冶谦
2023-03-14

首先,您的DockerFile中有一个问题:

RUN service mysql restart && /tmp/setup.sh

Docker映像不保存正在运行的进程。因此,run命令仅在Docker build阶段执行,并在生成完成后停止。相反,您需要在容器启动时使用cmdentrypoint命令指定该命令,如下所示:

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进入映像),所有