Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Dockerfile运行Mysql和Apache?_Docker_Cmd_Dockerfile_Foreground - Fatal编程技术网

如何从Dockerfile运行Mysql和Apache?

如何从Dockerfile运行Mysql和Apache?,docker,cmd,dockerfile,foreground,Docker,Cmd,Dockerfile,Foreground,我正试图为我们公司的一个项目创建一个Docker映像,我不想在创建容器后手动运行mysql和apache。下面是我的Dockerfile目前的样子: FROM php:7.4-apache RUN apt-get update \ && apt-get install -y default-mysql-server libzip-dev nano\ && docker-php-ext-install zip mysqli pdo pdo_mys

我正试图为我们公司的一个项目创建一个Docker映像,我不想在创建容器后手动运行mysql和apache。下面是我的Dockerfile目前的样子:

FROM php:7.4-apache 

RUN apt-get update \
    && apt-get install -y default-mysql-server libzip-dev nano\
    && docker-php-ext-install zip mysqli pdo pdo_mysql \
    && docker-php-ext-enable mysqli

RUN /etc/init.d/mysql start \
    && sleep 5 \
    && mysql -u root -e "CREATE DATABASE eccube" \
    && mysqladmin -u root password 'secret'

COPY ./src_files /var/www/html
问题是,当我启动容器时,mysql进程没有运行,所以我必须进入容器并运行
/etc/init.d/mysql start
。或者,我尝试在Dockerfile中使用CMD调用启动mysql进程:

CMD /usr/sbin/mysqld -u mysql
但这意味着现在是Apache服务器无法启动,我必须手动运行它

我睡得太少,喝了太多的咖啡,所以Docker文档在我看来就像是中国的。有人能解释一下如何从Dockerfile正确运行多个后台进程吗


非常感谢

请记住,
RUN
命令是在构建容器映像时执行的,而
CMD
命令是在容器启动时运行的,并且您只能有一个命令。这就是为什么您只看到MySQL或Apache正在运行

你调查过了吗?这将允许您在一个容器中运行数据库,在另一个容器中运行Apache服务器,并使用
docker compose up
轻松启动这两个容器

如果你真的想把所有东西都放在一个容器里,你仍然可以这样做;您可能会考虑单个BASH脚本来启动这两个脚本。您可以将Bash脚本添加到Docker构建过程中,然后设置
CMD
来运行该脚本,而不是只启动MySQL或Apache。Docker文档提供了一些示例,说明如何使用多个服务设置单个容器


我个人认为,使用Docker Compose可以最好地完成您的工作,这样您就可以分离您的关注点,但我不知道您的应用程序的详细信息。

谢谢!是的,最后我要做的是在Dockerfile中只运行几个命令,然后将所有不必要的东西放在Bash脚本中。我不想使用composer,因为我不想让人们运行超过必要数量的容器,因为这样,对于同一个项目,最终会有2到3个容器,这使得有时浏览容器列表试图找到所需的容器很麻烦。