2017-06-12 72 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