使用LAMP环境在Ubuntu中运行的Dockerfile

6

我将尝试创建一个Docker(LAMP)镜像,使用以下Dockerfile

FROM ubuntu:latest
RUN  apt-get update \
  && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    apache2 \
    mysql-server \
    php7.0 \
    php7.0-bcmath \
    php7.0-mcrypt
COPY start-script.sh /root/
RUN chmod +x /root/start-script.sh && /root/start-script.sh

start-script.sh:

#!/bin/bash
service mysql start
a2enmod rewrite
service apache2 start

我使用以下技术构建了它:

docker build -t resting/ubuntu .

然后使用以下命令运行:

docker run -it -p 8000:80 -p 5000:3306 -v $(pwd)/html:/var/www/html resting/ubuntu bash

问题在于,MYSQLApache2服务未启动。
如果我在容器中手动运行/root/start-script.sh,端口80可以成功映射到端口8000,但无法通过127.0.0.1:5000连接到MYSQL
如何确保在使用该镜像创建容器并将MYSQL映射到主机时,服务正在运行?
2个回答

4

您需要将脚本的执行更改为CMD指令。

FROM ubuntu:latest
RUN  apt-get update \
  && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    apache2 \
    mysql-server \
    php7.0 \
    php7.0-bcmath \
    php7.0-mcrypt
COPY start-script.sh /root/
RUN chmod +x /root/start-script.sh 
CMD /root/start-script.sh

虽然这样做可行,但这不是管理容器的正确方式。您应该为Apache2和另一个MySQL分别拥有一个容器。
请参考这篇文章,使用Docker-Compose构建LAMP堆栈:https://www.kinamo.be/en/support/faq/setting-up-a-development-environment-with-docker-compose

尝试过使用 CMD,但容器在执行后退出。该链接有助于拆分容器。但不知何故,MYSQL 无法与 PHP 容器通信,可能需要再尝试几次后发布另一个问题。 - resting
容器退出是因为进程已经完成,因为service apache2 start在后台执行了Apache2。容器存在是因为它有一个主要的进程需要执行。如果你想让它保持活着状态,请在前台执行Apache2MySQL - kstromeiraos

0

你需要多张图片 - 每个服务或应用程序都需要一张图片。

Docker 容器不是虚拟机,您在其中运行整个堆栈。它是一个虚拟应用程序,运行一个主要的进程。

如果您需要 php、apache 和 mysql,则需要 3 个 Docker 容器。一个是用于您的 php 应用程序,一个是用于 apache,另一个是用于 mysql。


好的,现在正在尝试将它们放入单独的容器中。 - resting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接