2015-11-05 154 views
0

我想在本地安裝linode/lamp容器以在某些wordpress項目上工作,而不會讓我的機器受到所有燈泡依賴性的影響。Linode/lamp + docker-compose

我跟着this tutorial工作很好(它實際上超級簡單)。

現在我想使用docker-compose,因爲我覺得只需鍵入docker-compose up並且很好走就更方便。

在這裏我做了什麼:

Dockerfile:

FROM linode/lamp 
RUN service apache2 start 
RUN service mysql start 

泊塢窗,compose.yml:

web: 
    build: . 
    ports: 
    - "80:80" 
    volumes: 
    - .:/var/www/example.com/public_html/ 

當我做docker-compose up,我得到:

▶ docker-compose up 
Recreating gitewordpress_web_1... 
Attaching to gitewordpress_web_1 
gitewordpress_web_1 exited with code 0 
Gracefully stopping... (press Ctrl+C again to force) 

我是guessi ng我需要在我的docker-compose.yml命令參數,但我不知道我應該設置。

任何想法我做錯了什麼?

+0

「docker-compose」這樣做的方式是實際爲每個組件使用不同的圖像。因此,而不是在同一個容器中運行mysql和apache,你將有一個apache + php容器和一個mysql容器。 – dnephin

+0

確實。但在我的情況下,一個容器就夠了! –

回答

1

您無法在Dockerfile中啓動這兩個進程。 Dockerfile確定構建映像時要運行的命令。

實際上,像Debian這樣的許多基本映像都是專門設計的,不允許在構建過程中啓動任何服務。

你可以做的是在包含Dockerfile的文件夾中創建一個名爲run.sh的文件。 將這個裏面:

#!/usr/bin/env bash 

service apache2 start 
service mysql start 

tail -f /dev/null 

這個腳本只是啓動這兩個服務並強制控制檯保持打開狀態。 但是,您需要將其放入容器中,這是通過Dockerfile中的兩行來完成的。總的來說,我想用這個Dockerfile則:

FROM linode/lamp 
COPY run.sh /run.sh 
RUN chmod +x /run.sh 
CMD ["/bin/bash", "-lc", "/run.sh"] 

這確保了發射了當容器,使其保持運行,也即這些服務真正開始的文件被運行正常。

您還應該注意的是,您的端口80實際上在您的主機上可用。如果你有任何綁定它,這個作曲家文件將無法正常工作。 如果你是這種情況(或者你不確定)嘗試改變港口線喜歡81:80左右,然後再試一次。

+0

這個答案非常漂亮! –