繁体   English   中英

运行Docker容器时自动启动mysql

[英]Start mysql automatically when running a Docker container

我创建了一个Dockerfile以在我的计算机上具有php7,mysql和其他一些库的开发环境。

当运行容器时,apache服务会自动启动,但是我无法通过mysql获得相同的结果。 我的Dockerfile的最后一句看起来像这样的CMD ["bash", "run.sh"] ,然后在run.sh中,我有这个:

#!/bin/bash
set -e

PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL"}
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php/7.0/apache2/php.ini
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php/7.0/cli/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php/7.0/apache2/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php/7.0/cli/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php/7.0/apache2/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php/7.0/cli/php.ini

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND

chmod 0755 start.sh
sleep 1
start.sh

/bin/bash

调用名为start.sh的文件,如下所示:

#!/usr/bin/env bash

# Mysql
sed -i -e 's/127.0.0.1/0.0.0.0/g' /etc/mysql/mysql.conf.d/mysqld.cnf
service mysql start

它分为两个文件,因为我测试了所有内容,但无法正常工作。 如果我在容器内执行docker exec并启动mysql,一切正常。

任何我做错事的想法吗?

您在run.sh脚本中相对较早地运行exec /usr/sbin/apache2 -DFOREGROUND 关于exec的事情是它不启动shell的子进程,而是用新进程替换了shell。

手册页

exec [-cl] [-a name] [command [arguments]]

如果指定了command,它将替换shell。 没有创建新的过程。 自变量成为命令的自变量。

这意味着您的shell脚本在调用exec之后将不会继续运行。

我现在可以建议使用Bash解决此问题的多种方法,但所有这些(在我看来)将是混乱且难以维护的。 如果您想在一个容器(例如Apache和MySQL)中管理多个流程,我强烈建议您看一看诸如supervisor之类的流程管理器。 官方文档中有一篇出色的文章 ,甚至使用了与您类似的用例作为示例。

start.sh没有绝对或相对路径,就像它在您的PATH中一样,是吗?

您可以在start.sh的开头添加一些“ echo'我实际上被称为'> log.txt”,以检查它是否被调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM