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

14 浏览
0 Comments

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

我有一个用于在容器中安装MySQL服务器的Dockerfile,我用以下命令启动它:

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

但是MySQL服务不会自动启动,我必须手动在容器内运行以下命令:

service mysql start

当我运行docker容器时,如何自动启动MySQL服务?

0
0 Comments

在Docker容器中运行服务时,如何自动启动服务?

问题的原因:

- 需要在Docker容器启动时自动启动服务

- 之前尝试的方法无法实现自动启动服务

解决方法:

1. 在Dockerfile中的最后一行添加以下代码:

ENTRYPOINT service ssh restart && bash

2. 运行Docker容器:

docker run -i -t ubuntu

3. 检查服务状态:

service ssh status

这种方法可以实现自动启动服务,但无法在后台运行容器。

另外,还可以尝试以下方法来解决自动启动服务的问题:

- 添加以下代码到Dockerfile中:

RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN ln -sf /dev/stdout /var/log/nginx/access.log
RUN ln -sf /dev/stderr /var/log/nginx/error.log

- 注意,使用"bash"作为最后的命令可能会导致无法通过docker stop或docker restart优雅地停止容器,建议使用其他命令替代,如"tail -f /var/log/mysql/error.log"。

以上是解决自动启动服务问题的方法,可以根据具体情况选择适合的解决方案。

0
0 Comments

在运行Docker容器时,自动启动服务的问题出现的原因是Docker镜像不保存正在运行的进程。因此,在Dockerfile中使用的RUN命令只会在构建过程中执行,并在构建完成后停止。解决方法是在容器启动时使用CMD或ENTRYPOINT命令指定要执行的命令。

解决方法有三种常见的方式来保持进程运行:

1. 使用service命令,并在其后附加非终止命令,如tail -F命令。

CMD service mysql start && tail -F /var/log/mysql/error.log

2. 使用前台命令来实现。

CMD /usr/bin/mysqld_safe

3. 将脚本包装成start.sh,并将其放在末尾。

CMD /start.sh

需要注意的是,对于初学者来说,不推荐使用supervisord。最好为容器使用单个服务或单个命令。

当服务在Docker容器中启动后,如何重新启动服务?

docker exec -it mysql /etc/init.d/mysqld restart

不推荐使用tail命令来判断MySQL是否正在运行。在大多数mysqld设置中,服务器将从一些错误中恢复,并在此过程中关闭并重新打开错误日志。并且无法确定tail -F命令是否在所有情况下都适用。

不知道为什么,但第一种解决方案选项对于service脚本运行正常。如果不使用tail命令,则会失败,即使服务已启动(至少对于tomcat7服务而言)。使用tail命令就可以正常工作。对于这两种情况,您需要使用cap_add开关(--cap-add SYS_PTRACE)以及至少SYS_PTRACE。

registry.hub.docker.com将被重定向到hub.docker.com,该页面上没有相关信息。

所以,当运行Docker容器时,通过systemctl注册的常规服务不会运行。

不,更多信息请参考stackoverflow.com/questions/46800594/…

最好的答案,帮助我节省了购买Udemy课程的费用。

0
0 Comments

问题的出现原因:在运行Docker容器时,希望能够自动启动一个服务。

解决方法:在dockerfile的末尾添加以下代码:ENTRYPOINT service mysql start && /bin/bash。这是解决当前Docker容器问题的最佳答案:Docker版本为18.09.7,构建版本为2d0083d。如果不加上&& /bin/bash,服务会立即停止。

0