2017-08-28 363 views
0

搬運工撰寫V3

我試圖運行像composer update一些特定的應用程序的命令,每當我跑docker-compose up,沿這如何使用docker-compose在Docker鏡像和入口點之間運行命令?

version: '3' 
services: 
    app1: 
    image: laraedit/laraedit 
    ports: 
     - 3000:80 
    volumes: 
     - ./appfolder:/var/www/appfolder 

如果我行泊塢窗,compose.yml文件看起來我在入口點運行我的第一次運行命令,它將覆蓋默認laraedit/laraedit運行的所有命令。 (至少我這麼認爲,因爲當我的入口點命令完成時容器總是停止)

我不想打擾laraedit/laraedit啓動過程,我只是想執行一些命令。

如果我不使用docker-compose,那麼我會在本地使用laraedit/laraedit Dockerfile,然後我可以編輯它並在其中添加一個RUN語句。

但是由於我沒有Dockerfile,並且我無法在不拋開容器的正常啓動的情況下創建入口點,所以我不知道如何自動化每次運行這些無聊命令的過程我運行docker-compose up

事情我已經嘗試:

+1

AFAIU,如果你不希望使用「laraedit/laraedit」的形象,那麼你必須使用不同的Dockerfile進行編輯。通過新創建的Dockerfile創建新圖像並在撰寫文件中使用它。我也在等待答案:-)。 – vivekyad4v

+0

是這個https://github.com/laraedit/laraedit-docker/blob/master/Dockerfile原始碼頭文件?如果是這樣,當重寫'command'或'entrypoint'時'supervisord'正在運行? – ItayB

+0

@ItayB是的,這是正確的dockerfile。當從'docker-compose.yml'覆蓋'command'或'entrypoint'值時,'supervisord'從不運行。 – Bango

回答

1

您需要使用自定義擴展laraedit/laraedit圖像。 您可以使用Dockerfile像這樣簡單:

FROM laraedit/laraedit 
COPY my_entrypoint.sh /my_entrypoint.sh 
RUN chmod +x /my_entrypoint.sh 
ENTRYPOINT /my_entrypoint.sh 

my_entrypoint.sh是包含初始化命令,並在其端調用原始入口點,例如在腳本:

#!/bin/sh 

my_init_cmd1 
my_init_cmd2 

... 

/original/entrypoint/script/path 

你可以得到/original/entrypoint/script/path通過讀取原始laraedit的值Dockerfile

假設您將上述兩個文件放在docker-compose.yml旁邊的docker目錄中,而不是您需要調整的你的搬運工,compose.yml這樣的:

version: '3' 
services: 
    app1: 
    build: ./docker/ 
    ports: 
    - 3000:80 
    volumes: 
    - ./appfolder:/var/www/appfolder 
相關問題