2017-06-12 79 views
1

我想有以下Dockerfile与LAMP运行(Ubuntu的)

Dockerfile创建一个泊坞(LAMP)图像:

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,但我无法连接到MYSQL127.0.0.1:5000

当我旋转带图像的容器并将MYSQL映射到主机时,如何确保服务正在运行?

回答

0

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

看看这篇文章是建立使用多克尔 - 撰写一个LAMP堆栈:https://www.kinamo.be/en/support/faq/setting-up-a-development-environment-with-docker-compose

+0

已经尝试过'CMD',但容器在执行后退出。 该链接有助于打破容器。但不知何故,'MYSQL'不是与'PHP'容器交谈,可能会在多次尝试后发布另一个问题。 – resting

+0

容器因为进程完成而退出,因为'service apache2 start'在后台执行'Apache2'。因为它有一个主要的执行过程,所以容器是存在的。如果您希望它保持活跃状态​​,请在前台运行exec'Apache2'或'MySQL'。 – kstromeiraos

0

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

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

如果您需要php,apache和mysql,那么您将需要3个docker容器。一个用于你的php应用,一个用于apache,另一个用于mysql。

+0

权,试图把它们放在不同的容器了。 – resting