运行LAMP的Dockerfile(Ubuntu)

我正在尝试使用以下命令创build一个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 

我用它来构build它:

 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到我的主机?

您需要将脚本的执行更改为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 

尽pipe这样做有效,但这不是pipe理容器的正确方法。 你应该有一个容器为你的Apache2和另一个为MySQL

看看这篇使用Docker-Compose构buildLAMP堆栈的文章: https : //www.kinamo.be/en/support/faq/setting-up-a-development-environment-with-docker-compose

你需要多个图像 – 每个服务或应用程序一个。

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

如果你需要PHP,Apache和MySQL,那么你将需要3个docker集装箱。 一个为你的PHP应用程序,一个为Apache和一个为MySQL。